Nugety for Microsoft .NET Core 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.
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 without having to recompile and deploy.
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. 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.
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.
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.
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!
There is a growing number of application integration libraries that make using Nugety with your application a snap.
- NugetyCore - Core Nugety API this repo.
- NugetyCore.AspNetCore - ASP.NET integration for Nugety this repo.
- Nugety.Autofac - Support for Nugety as Autofac modules this repo.
- NugetyCore.Nuget - Support for Nuget as Nugety source this repo.