【发布时间】:2013-08-13 21:30:06
【问题描述】:
我是自动依赖注入的新手,并试图用 MVC4 应用程序干净地实现 Ninject。一切正常,但我的强迫症想知道应用程序将如何根据 NinjectWebCommon.cs 中的 RegisterServices(IKernel 内核)方法中的列表绑定进行扩展。例如,
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IAbstractManagerA>().To<ConcreteManagerA>();
kernel.Bind<IAbstractManagerB>().To<ConcreteManagerB>();
kernel.Bind<IAbstractRepoA>().To<ConcreteRepoA>();
...etc etc could be hundreds
}
有没有更好的方法来处理这个问题?也许将每个配对作为 web.config 设置或其他配置文件?本质上为依赖注入注入依赖:)
【问题讨论】:
-
您是否考虑过使用约定而不是配置? Ninject 和 Structuremap 为scanner.FromCallingAssembly()等配置提供了scanner函数;扫描仪.BindWithDefaultConventions();在我个人看来,混合 xml 文件配置和 IoC 不能很好地混合,这就是为什么该功能在结构映射中被弃用的原因,希望有所帮助!
-
那你应该考虑微软的Unity:msdn.microsoft.com/en-us/library/ff647848.aspx
-
@ThanhNguyen:说真的,你不能只建议 Unity。 Unity 能做的很少,其他框架(例如 Ninject)不能做。
-
@Steven:我完全同意 Steven :) 我只是试图专注于他的特定需求而不是系统设计方面,无论如何,你是完全正确的!
-
@Pedro 你的想法很有趣。不知道 Ninject 有这样的功能。使用反射和命名约定可以消除对无休止的硬编码绑定以及外部配置文件的需要。我会进一步调查。谢谢!
标签: asp.net-mvc dependency-injection inversion-of-control ninject