有很多DI容器,我觉得有点丢失。我是DI模式的新手。
我正在阅读这本书Dependency Injection in .NET,我发现DI在改进代码库方面非常有用,使其松散耦合并且更易于测试。
我现在想为我的虚拟项目引入一个DI容器,但是有很多可供选择。
我如何选择Castle Windsor,Unity,StructureMap,Spring.NET,Autofac,Ninject,Funq,LinFu等等?
我想一个连贯的观点是“只选一个”并开始使用它(因为我认为它们很容易互换,特别是在早期阶段),但我想做出更明智的决定。 / p>
答案 0 :(得分:5)
这就像买车一样。你可能会喜欢丰田,但它只是2.5L发动机。你可能会喜欢法拉利,但它太红了。你可能会喜欢马自达,但你的老板不允许你开车。你可能会喜欢悍马,但是你的同事会嘲笑你。根据您的口味混合制造商,对于某些人或在某个不同的时刻总会有某些东西缺失。
我的看法 - 首先,DI通常比没有DI更好。挑选任何东西,你会变得更好。我会选择一些:
我的2美分 - http://www.springframework.net/。我的意思是,他们documentation contents page就像20页长......
或者您可能想要查看类似问题的更多答案:
答案 1 :(得分:2)
您可以从MVC3中的内置DependencyResolver开始。稍后您可以轻松升级到Enterprise Library Unity DI。
Brad Wilson在How to use DI in MVC3上提到了一系列帖子。
答案 2 :(得分:0)
我的立场是,看看几个 - 你已经获得了优秀的“.NET中的依赖注入”一书(我将添加Ninject,但不幸的是,书中没有提到) - 然后选择其中一个是你最了解的,就像语法一样。开始使用高级功能并不重要,只是你开始。
一旦你有一个IoC容器,替换它应该是微不足道的,因为你所有的更改将在一个地方 - 聚合根 - 而不是遍布你的代码库。如果您还没有使用IoC容器,也会强制您设计依赖注入,这将对您的项目产生更大的影响。
答案 3 :(得分:0)
我一直在使用Ninject和Unity。当您将Unity MVC添加到Unity时,代码会让我想起Ninject代码。
两者都很容易实现。两者都允许用启动器类中心替换以配置文件为中心。
我建议创建一个2小时的项目,并在每个ioc di框架中实现它,并根据经验决定你喜欢哪一个。但是,如果您在不查看其他功能的情况下执行此操作,您可能会发现错过了某些内容。因此,请查看外围功能,例如第三方支持。
答案 4 :(得分:0)
除了其他好评之外 - 如果您安装Unity.MVC3软件包,请注意如果您希望随每个请求处理对象,则必须使用HierarchicalLifetimeManager。它工作得很好但我认为你会发现在大多数情况下所有主要的都很好。
您的问题是找到适合您环境的产品。有些地方允许开源,有些地方不允许,在这种情况下Unity会胜出。
答案 5 :(得分:-5)
用于.NET的最发达的DI容器是Managed Extensibility Framework (MEF),我强烈建议您使用它。 MEF在团队中快速,简单且易于维护,并具有完美的学习曲线。