/Nugety

Primary LanguageC#GNU Affero General Public License v3.0AGPL-3.0

ugety for .NET Framework

Nugety for Microsoft .NET provides support for the Modular Composition of both Web and Native applications. It employs a Provider Model for the discovery of modules which are then loaded into the Assembly Load Context. Nugety is best suited to ASP.NET Core or any application which employs an IoC container such as Autofac, Castle, Spring.Net or Unity. An IoC container will allow the modules to interact while still maintaining the all important Seperation of Concerns.

Build Status

nugety MyGet Build Status

So why use Nugety?

This question is best answered by the likes of Martin Fowler in his blog post Sacrificial Architecture. The most effective way of adhering to the principal of Sacrificial Architecture is through Modular Architecture. Modular architecture encourages the logical and physical Separation of Concerns allowing functionality to be easily upgraded or replaced.

In comparison to monolithic composition of components and assemblies which is arguably an anti-pattern, Modular design is now actively encouraged by Microsoft and is a fundamental principal of ASP.NET Core.

Nugety allows all related aspects of a feature, including Services, Components and Static Files to be registered with the host application. Nugety allows all related aspects of a feature, including Services, Components and Static Files to be registered with the host application. NugetyCore will also load each Module Initializer assembly and their dependencies via a module specific Assembly Load Context. This will help in the Separation of Concerns and in minimising any leakage between modules.

More details are available on the wiki.

How do I get started?

Our Getting Started tutorial walks you through integrating Nugety with a simple ASP.NET Core app and gives you some starting points for learning more.

Get Packages

You can get Nugety by grabbing the latest NuGet packages. If you're feeling adventurous, continuous integration builds are on MyGet.

Release notes are available on the wiki.

Get Help

Need help with Nugety? We're ready to answer your questions on Stack Overflow. Alternatively ask a question here.

##Super-duper quick start

Create a Module assembly, get Module using NugetyCatalog and then load Module Initialiser.

var modules = new NugetyCatalog()
	.FromDirectory()
	.GetModules<IModuleInitializer>().Load();

Set File Name Filter Pattern for Module Initialiser Assembly:

var modules = new NugetyCatalog()
	.Options.SetFileNameFilterPattern("*module*.dll")
	.FromDirectory()
	.GetModules<IModuleInitializer>().Load();

Set Module Name Filter Pattern for Modules to load:

var modules = new NugetyCatalog()
	.Options.SetModuleNameFilterPattern("*Development*")
	.FromDirectory()
	.GetModules<IModuleInitializer>().Load();

Set root Modules Directory. The default root directory is "Nugety".

var modules = new NugetyCatalog()
	.FromDirectory("DevelopmentModules")
	.GetModules<IModuleInitializer>().Load();

Set Modules to be resolved. The default behaviour is for all modules found in the root Nugety Modules Directory to resolve.

var modules = new NugetyCatalog()
	.GetModules<IModuleInitializer>("swagger", "autho").Load();

Intrigued? Check out our Getting Started walkthrough!

Project

There is a growing number of application integration libraries that make using Nugety with your application a snap.