Dependency injection 我正在为.net寻找一个简单但实用且健壮的IOC/DI框架
我将在一个经验较少的开发人员的项目中使用它,所以像Spring.NET这样的复杂框架不是一个选项。我在想:Dependency injection 我正在为.net寻找一个简单但实用且健壮的IOC/DI框架,dependency-injection,inversion-of-control,castle-windsor,structuremap,ninject,Dependency Injection,Inversion Of Control,Castle Windsor,Structuremap,Ninject,我将在一个经验较少的开发人员的项目中使用它,所以像Spring.NET这样的复杂框架不是一个选项。我在想: 尼尼特 温莎城堡 结构图 哪一种方法可以在不丧失灵活性的情况下呈现中等的学习曲线 还有一个问题-配置的正确位置在哪里?由于内核/配置在三层ASP.NET应用程序(不是MVC!!!所有示例都使用MVC:)我使用了ninject,发现它很容易让新开发人员跟上进度。考虑从手动布线开始:请参阅。它让经验较少的开发人员对IOC/DI的基础知识有了更好的了解。我认为您拒绝spring.net是太草率了
还有一个问题-配置的正确位置在哪里?由于内核/配置在三层ASP.NET应用程序(不是MVC!!!所有示例都使用MVC:)我使用了ninject,发现它很容易让新开发人员跟上进度。考虑从手动布线开始:请参阅。它让经验较少的开发人员对IOC/DI的基础知识有了更好的了解。我认为您拒绝spring.net是太草率了。Spring提供了极其灵活的学习曲线,因此在一开始,它是一种“你从中得到你想要的东西”的方法。
您可以从所有IoC容器中最简单的容器开始,然后转向aop、事务、单元测试或任何您想要的东西,因此复杂性逐渐增加 这是我最近两份使用Spring的工作中的第一个卖点。其他要点包括:
- 它不会强迫您使用它的api或改变您的体系结构。同样,这会引导您以自己的速度调整其功能
- 非常广泛的文档
当项目成熟时,您的开发人员也会成熟,所以spring最终会派上用场。。。(在我看来,一开始是免费的)除了Ninject这一伟大的产品之外,我还熟悉另外两种选择:
希望这有帮助。我发现StructureMap非常有用,而且使用起来非常直观。我和Ninject玩了一会儿,发现不太方便,但我玩得很开心。我还建议您使用作为实际实施IOC和应用程序之间的中介。当您以后想要切换IOC/DI容器时,这就不那么麻烦了。StructureMap和Castle windsor有适配器。通过谷歌搜索,我认为Ninject 2也有一个这样的适配器。是我选择的容器。它允许通过lambda表达式进行注册,以获得最大的灵活性(链接中有一些很好的示例) 它也有一个Silverlight兼容的版本。我不确定其他集装箱是否有 至于放置,容器应该在应用程序启动期间构建。对于ASP.NET应用程序,这将位于Global.application\u Start方法中
Autofac拥有一个使用您在启动期间构建的容器注入页面实例的功能。正确使用DI的好处在于,您可以推迟到最后一个负责任的时刻才决定使用哪个DI容器。在应用程序体系结构术语中,这对应于所谓的组合根,即将所有依赖项连接在一起的地方。这是 除了compositionroot之外,整个应用程序都可以在根本不引用任何特定DI容器的情况下编写。你只需要这样 在选择DI容器时,我知道这些适用于.NET的DI容器:
我们使用它作为DI框架,还没有遇到任何问题(尽管我确实需要这个样本,它还不是核心的一部分)。如果您还熟悉任何DI框架,我会使用
它有一个非常简单的API,可以让您快速入门。虽然很简单,但它仍然支持许多。库的设计考虑到了迁移,这意味着切换到另一个框架是相当简单的。为了证明这一点,有一个。不可知容器与CommonServiceLocator没有什么关系。如果您以依赖注入方式编写代码,则无需引用容器或CommonServiceLocator。请参阅Castle Windsor有Silverlight 3版本。这并不完全正确。不同的容器提供不同的功能,并从不同的角度处理不同的问题。您可以利用所选容器的强大功能(如可启动性、事件连接、类型化工厂等),而无需引用它,而是通过以某种方式设计组件。您通常可以调整其他容器来使用您的组件,但这意味着您需要编写一些附加的粘合代码来弥补其不足/差异。它几乎没有现成的功能。这是一个脚手架,你需要在上面手动编写你的整个线路。我同意Krzysztof的观点:例如,Funq不支持