Component registering into Ninject container using attributes
- Mark implementation with attribute
[As(typeof (INowProvider))]
[SingleInstance]
class NowProvider : INowProvider
{
public DateTime UtcNow()
{
return DateTime.UtcNow;
}
}
- Create assembly registration
using Ninject.Extensions.MetadataRegistration;
using Ninject.Modules;
namespace AssemblyNameSpace
{
public class AutoRegistrationNinjectModule : NinjectModule
{
public override void Load()
{
Kernel.AutoRegistration(GetType().Assembly);
}
}
}
- Call all assemblies specific Ninject modules in the main assembly
using Ninject.Extensions.MetadataRegistration;
using Ninject.Modules;
namespace MainAssemblyNameSpace
{
public class AutoRegistrationNinjectModule : NinjectModule
{
public override void Load()
{
Kernel.AutoRegistration(GetType().Assembly);
Kernel.Load(new NinjectModule[]
{
new Assembly1.AutoRegistrationNinjectModule(),
new Assembly2.AutoRegistrationNinjectModule()
});
}
}
}
- AsAttribute - The implementation class will be registred as specified type
[As(typeof (ITemplateUserProvider))]
class ExampleClass : ITemplateUserProvider
{
private readonly INowProvider _nowProvider;
public ExampleClass(INowProvider nowProvider)
{
_nowProvider = nowProvider;
}
public string CurrentDateTimeAsString()
{
_nowProvider.UtcNow().ToString();
}
}
- SingleInstanceAttribute - The single instance of the implementation class will be shared across all consumers