这依赖注入工具应该怎么用? [关闭](Which Dependency Injection To

2019-07-19 23:21发布

我正在考虑使用微软统一于我们的用户界面我依赖注入工具。

我们的中间层已经使用了温莎城堡,但我想我应该与微软坚持。

有没有人有最好的依赖注入工具是什么有什么想法?

  • Autofac
  • 城堡微内核/温莎
  • PicoContainer.NET
  • Puzzle.NFactory
  • Spring.NET
  • StructureMap
  • Ninject
  • 统一
  • 简单的喷油器
  • NauckIT.MicroKernel
  • WINTER4NET
  • ObjectBuilder的

Answer 1:

坚持一个容器,是不是真的很重要,如果你的系统设计和IoC / DI记在心里。 有了正确的方法,你可以很容易地改变的IoC库的道路。

而且,当然,容器必须提供足够的灵活性来支持常见的广泛使用场景(生命周期管理,适当的容器嵌套,XML和代码配置,拦截,快速解决问题)。

我建议城堡(广泛使用,有很多集成库)和Autofac之间挑(轻巧快捷且有适当的容器嵌套,而不是广泛使用)

有一个IoC容器的完整列表由Hanselman的

PS:你不希望使用统一



Answer 2:

最近刚刚掺混使用这些6( 温莎 , 团结 , Spring.Net , Autofac , Ninject , StructureMap )我公司可以提供各的简单总结,我们的选择标准,我们的最终选择。

注意:我们不看PicoContainer.Net作为我们团队的一个考虑。净口是从Java版本相当差。 我们还没有看ObjectBuilder的,因为团结是建立在ObjectBuilder2的顶部,被认为是默认为上乘之选。

首先,我可以说或多或少所有的人都非常相似,它真的可以归结为真正最适合你和你的具体要求。 我们的要求包括:

要求

  • 基于构造方法注入(我们打算使用属性,字段或方法注入)
  • 可编程配置( XML)
  • 容器层次结构(每个应用程序之一,每个请求和每个会话到多个隐式绑定组件的寿命范围容器)
  • 部件寿命管理(以便进行更精确的作用域例如瞬变/单)
  • 从接口注入键入或混凝土实例(例如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表达式配置似乎有点过于复杂但是,再次,可以很容易地封装了。 部件作用域是通过“标记”机制来实现的,所有部件都采用助洗剂这是有点不方便配置在前面。 子容器从父创建,并从“标签”分配组件。 允许仿制注射。

结论

我们最终的选择是温莎和团结之间,而这一次,我们选择了团结,因为它易于使用,文档,推广体系,并用它在“生产”的状态之中。



Answer 3:

这里是一个比较.NET IoC容器的好文章。 http://blog.ashmind.com/index.php/2008/08/19/comparing-net-di-ioc-frameworks-part-1/



Answer 4:

我开始使用Autofac一年前,因为没有回头..



Answer 5:

我是一个Autofac风扇,但温莎和统一都将做好(虽然温莎比团结更强大,不需要归属你的代码)。 有很多很好的技术无理由坚持一个容器中的系统虽然。



Answer 6:

使用什么工作。 大多数具有特有的功能他们,几乎所有的功能更丰富比统一。 如果统一是所有你需要,你当然可以使用它。

使用微软的统一只是因为它从微软的是做出决定一个好办法。 想想你需要的,为什么什么,并选择适合您的需求之一。

然而,我第二坚持如果可能的单个容器的概念。



Answer 7:

我一直在使用托管扩展框架 ,并觉得这是很容易的工作。 它已经集成到.NET 4 。



Answer 8:

https://stackoverflow.com/questions/71041/which-single-iocdi-container-would-you-recommend-using-and-why



Answer 9:

除非你已经有经验和个人偏好研究通过可能的IoC容器解决方案的一个使用的特定子技术,他们都运作良好,我没有看到任何特别的一个与使它脱颖而出的“杀手级功能”从别人。 团结是可能是已经利用P&P企业库4.x版解决方案最适合...



Answer 10:

IOC容器基准-业绩比较具有的性能和功能比较表为20+产品并使其保持最新。

从文章的结论:

SimpleInjector,浩,Funq,Munq和迪纳摩提供最佳的性能,它们是非常快。 给他们一个尝试!

尤其是简单的喷油器似乎是一个不错的选择。 它的速度非常快,具有良好的文档,同时还支持高级场景像拦截和一般的装饰。



文章来源: Which Dependency Injection Tool Should I Use? [closed]