【发布时间】:2014-07-07 13:09:57
【问题描述】:
我有一个 MVC4 应用程序,它使用反射在运行时加载控制器。这些控制器以及主应用程序使用 Ninject 将内容注入构造函数。
每个动态控制器都维护一个它需要的所有绑定的列表,并将它们存储为主应用程序在运行时加载的 Ninject 模块。
目前我遇到了多个动态控制器包含相同绑定的问题。我希望动态控制器是自包含的,所以我不想从控制器项目中删除绑定,我真的不想解析 txt 或 xml 文档来读取所有绑定。
有没有办法删除重复的绑定,或者告诉 Ninject 使用它遇到的第一个绑定(如果有多个绑定)。
加载所有引用的程序集绑定
public static StandardKernel LoadNinjectKernel(IEnumerable<Assembly> assemblies)
{
var kernel = new StandardKernel();
foreach (var asm in assemblies)
{
asm
.GetTypes()
.Where(t =>
t.GetInterfaces()
.Any(i =>
i.Name == typeof(INinjectBootstrapper).Name))
.ToList()
.ForEach(t =>
{
var ninjectModuleBootstrapper =
(INinjectBootstrapper)Activator.CreateInstance(t);
kernel.Load(ninjectModuleBootstrapper.GetModules());
});
}
return kernel;
}
绑定类
public class NinjectBindings : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<IDMSService>().To<DMSService>();
Bind<ICaseManagerRepo>().To<CaseManagerRepo>();
}
}
控制器工厂
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if (controllerType != null)
{
return (IController)kernel.Get(controllerType);
}
else
{
return base.GetControllerInstance(requestContext, controllerType);
}
}
【问题讨论】:
标签: c# asp.net-mvc-4 dependency-injection dependencies ninject