我将在经验较少的开发人员的项目中使用它,因此不能选择像 Spring.NET 这样的复杂框架。我在想:
- 忍者
- 温莎城堡
- 结构图
哪个会呈现适度的学习曲线而不失去灵活性?
还有一个问题 - 放置配置的正确位置在哪里?由于 3 层 ASP.NET 应用程序上的内核/配置(不是 MVC !!!所有示例都使用 MVC :))
我将在经验较少的开发人员的项目中使用它,因此不能选择像 Spring.NET 这样的复杂框架。我在想:
哪个会呈现适度的学习曲线而不失去灵活性?
还有一个问题 - 放置配置的正确位置在哪里?由于 3 层 ASP.NET 应用程序上的内核/配置(不是 MVC !!!所有示例都使用 MVC :))
正确使用 DI 的好处在于,您可以将使用哪个 DI 容器的决定推迟到最后负责的时刻。在应用程序架构术语中,这对应于所谓的Composition Root,您可以在其中将所有依赖关系连接在一起。这通常是应用程序的入口点。
除了 Composition Root 之外,整个应用程序都可以在完全不引用任何特定 DI Container 的情况下编写。您只需要遵循众所周知的模式和原则。
在选择 DI 容器时,我知道这些 .NET 的 DI 容器:
就个人而言,到目前为止,我对温莎城堡很满意,但我还没有获得所有这些容器的丰富经验。
这是一个 ASP.NET(不是 MVC)Ninject 示例:
我使用了 ninject,发现它很容易让新开发人员跟上它的速度。
考虑从手工接线开始:参见http://blog.objectmentor.com/articles/2010/01/17/dependency-injection-inversion。它让经验不足的开发人员更好地了解 IOC/DI 的基础知识。
我认为你太仓促拒绝spring.net。Spring 提供了一个非常灵活的学习曲线,所以一开始它是一种“你可以从中获取你想要的东西”的方法。
您可以从最简单的 IoC 容器开始,然后再转到 aop、事务、单元测试或任何您想要的东西,因此复杂性逐渐增加。
这是我最近两份工作中使用 Spring 的第一大卖点。其他要点是:
当项目成熟时,您的开发人员也会成熟,所以春天最终会派上用场......(在我看来,一开始是免费的)
我们使用托管的可扩展性框架。它是 .NET 4.0 框架(当前处于候选版本)的一部分,您可以在System.ComponentModel.Composition命名空间中找到它。codeplex 站点目前仍然是最好的文档来源。
MEF 的关注点更多的是“可扩展性”而不是“依赖注入”,但它使用依赖注入来实现这一点。例如,Visual Studio 2010 代码编辑器使用 MEF 来实现可扩展性。
我们将它用作 DI 框架并且还没有遇到任何问题(尽管我确实需要动态实例化示例,它还不是核心的一部分)。
看看http://funq.codeplex.com/首先它与 Windsor 和其他基于反射的容器相比非常快其次它非常灵活但仍然具有非常易读的配置(如果你已经了解了Lamba 表达式应该花费很长时间)
Autofac是我选择的容器。它允许通过 lambda 表达式注册以获得最大的灵活性(链接有一些很好的例子)。
它还具有与 Silverlight 兼容的版本。我不确定其他容器是否可以。
至于放置,容器应该在应用程序启动期间构建。对于 ASP.NET 应用程序,这将在 Global.Application_Start 方法中。
Autofac 具有ASP.NET 集成,它使用您在启动期间构建的容器注入页面实例。
如果您还熟悉任何 DI 框架,我会选择Simple Injector。
它有一个非常简单的 API,可以让您快速入门。虽然简单,但它仍然支持许多高级配置场景的. 该库在设计时考虑了迁移,这意味着切换到另一个框架将相当简单。为了证明这一点,项目的 wiki 上有一个迁移指南。