我正在考虑使用微软统一于我们的用户界面我依赖注入工具。
我们的中间层已经使用了温莎城堡,但我想我应该与微软坚持。
有没有人有最好的依赖注入工具是什么有什么想法?
- Autofac
- 城堡微内核/温莎
- PicoContainer.NET
- Puzzle.NFactory
- Spring.NET
- StructureMap
- Ninject
- 统一
- 简单的喷油器
- NauckIT.MicroKernel
- WINTER4NET
- ObjectBuilder的
我正在考虑使用微软统一于我们的用户界面我依赖注入工具。
我们的中间层已经使用了温莎城堡,但我想我应该与微软坚持。
有没有人有最好的依赖注入工具是什么有什么想法?
坚持一个容器,是不是真的很重要,如果你的系统设计和IoC / DI记在心里。 有了正确的方法,你可以很容易地改变的IoC库的道路。
而且,当然,容器必须提供足够的灵活性来支持常见的广泛使用场景(生命周期管理,适当的容器嵌套,XML和代码配置,拦截,快速解决问题)。
我建议城堡(广泛使用,有很多集成库)和Autofac之间挑(轻巧快捷且有适当的容器嵌套,而不是广泛使用)
有一个IoC容器的完整列表由Hanselman的
PS:你不希望使用统一
最近刚刚掺混使用这些6( 温莎 , 团结 , Spring.Net , Autofac , Ninject , StructureMap )我公司可以提供各的简单总结,我们的选择标准,我们的最终选择。
注意:我们不看PicoContainer.Net作为我们团队的一个考虑。净口是从Java版本相当差。 我们还没有看ObjectBuilder的,因为团结是建立在ObjectBuilder2的顶部,被认为是默认为上乘之选。
首先,我可以说或多或少所有的人都非常相似,它真的可以归结为真正最适合你和你的具体要求。 我们的要求包括:
ILogger -> typeof(FileLogger)
或ILogger -> new FileLogger()
IDisposable
集装箱部件推倒 有据可查的和/或在线信息一应俱全
注:虽然表现它不是在选择因素,因为它似乎审核所有容器根据此相似的要求标杆
每个容器是在一个典型的Asp.Net web表单项目中使用(因为这是我们的目标应用程序类型)。 我们使用一个单一的简单的页面与单一简单的用户控制,从基站页/碱分别控制每个继承。 我们使用1个容器上BasePage
对在Global.asax“每个请求”范围容器1的“应用程序”范围,并试图链在一起,从而可以依赖从两个容器来解决。
每个Web应用程序共享一个人为的组的域对象模拟依赖性,范围型(单/瞬态)的多层次的,并且还管理和非管理类( IDisposable
需要)。 “顶级”依赖组分手动地从所述方法中注入BasePage
。
温莎 - 符合所有的标准,并具有良好的病史,博客社区和在线文档。 易于使用和大概是事实上的选择。 通过工厂设施先进组件的创建。 还允许单独创建容器的链接。
Spring.Net - 详细的和无益的文档和无明显/易可编程配置。 不支持泛型。 没有选择
Ninject - 易与良好清晰的文档使用。 强大的功能实现,除了容器层次我们所有的要求,所以很遗憾没有选择。
StructureMap -记录不完整,但有相当能够满足我们的所有要求先进的功能集,但有集装箱层次没有内置的机制,虽然可以使用循环砍死在一起,看到这里的lambda表达式流畅的界面做似乎有点过复杂在第一,尽管可以封装了。
团结 - 有据可查的,易于使用和满足我们所有的选择标准,并有一个简单的扩展机制来添加我们所需要的前/后创建事件机制。 子容器必须从父容器中创建。
Autofac - 有据可查的,比较容易使用,虽然lambda表达式配置似乎有点过于复杂但是,再次,可以很容易地封装了。 部件作用域是通过“标记”机制来实现的,所有部件都采用助洗剂这是有点不方便配置在前面。 子容器从父创建,并从“标签”分配组件。 允许仿制注射。
我们最终的选择是温莎和团结之间,而这一次,我们选择了团结,因为它易于使用,文档,推广体系,并用它在“生产”的状态之中。
这里是一个比较.NET IoC容器的好文章。 http://blog.ashmind.com/index.php/2008/08/19/comparing-net-di-ioc-frameworks-part-1/
我开始使用Autofac一年前,因为没有回头..
我是一个Autofac风扇,但温莎和统一都将做好(虽然温莎比团结更强大,不需要归属你的代码)。 有很多很好的技术无理由坚持一个容器中的系统虽然。
使用什么工作。 大多数具有特有的功能他们,几乎所有的功能更丰富比统一。 如果统一是所有你需要,你当然可以使用它。
使用微软的统一只是因为它从微软的是做出决定一个好办法。 想想你需要的,为什么什么,并选择适合您的需求之一。
然而,我第二坚持如果可能的单个容器的概念。
我一直在使用托管扩展框架 ,并觉得这是很容易的工作。 它已经集成到.NET 4 。
https://stackoverflow.com/questions/71041/which-single-iocdi-container-would-you-recommend-using-and-why
除非你已经有经验和个人偏好研究通过可能的IoC容器解决方案的一个使用的特定子技术,他们都运作良好,我没有看到任何特别的一个与使它脱颖而出的“杀手级功能”从别人。 团结是可能是已经利用P&P企业库4.x版解决方案最适合...
IOC容器基准-业绩比较具有的性能和功能比较表为20+产品并使其保持最新。
从文章的结论:
SimpleInjector,浩,Funq,Munq和迪纳摩提供最佳的性能,它们是非常快。 给他们一个尝试!
尤其是简单的喷油器似乎是一个不错的选择。 它的速度非常快,具有良好的文档,同时还支持高级场景像拦截和一般的装饰。