3

我将在经验较少的开发人员的项目中使用它,因此不能选择像 Spring.NET 这样的复杂框架。我在想:

  1. 忍者
  2. 温莎城堡
  3. 结构图

哪个会呈现适度的学习曲线而不失去灵活性?

还有一个问题 - 放置配置的正确位置在哪里?由于 3 层 ASP.NET 应用程序上的内核/配置(不是 MVC !!!所有示例都使用 MVC :))

4

11 回答 11

4

正确使用 DI 的好处在于,您可以将使用哪个 DI 容器的决定推迟到最后负责的时刻。在应用程序架构术语中,这对应于所谓的Composition Root,您可以在其中将所有依赖关系连接在一起。这通常是应用程序的入口点

除了 Composition Root 之外,整个应用程序都可以在完全不引用任何特定 DI Container 的情况下编写。您只需要遵循众所周知的模式和原则

在选择 DI 容器时,我知道这些 .NET 的 DI 容器:

就个人而言,到目前为止,我对温莎城堡很满意,但我还没有获得所有这些容器的丰富经验。

于 2010-02-04T08:45:25.893 回答
2

这是一个 ASP.NET(不是 MVC)Ninject 示例:

http://davidhayden.com/blog/dave/archive/2008/06/20/NinjectDependencyInjectionASPNETWebPagesSample.aspx

于 2010-02-04T09:50:19.723 回答
0

我使用了 ninject,发现它很容易让新开发人员跟上它的速度。

于 2010-02-03T18:18:20.567 回答
0

考虑从手工接线开始:参见http://blog.objectmentor.com/articles/2010/01/17/dependency-injection-inversion。它让经验不足的开发人员更好地了解 IOC/DI 的基础知识。

于 2010-02-03T18:21:54.613 回答
0

我认为你太仓促拒绝spring.net。Spring 提供了一个非常灵活的学习曲线,所以一开始它是一种“你可以从中获取你想要的东西”的方法。
您可以从最简单的 IoC 容器开始,然后再转到 aop、事务、单元测试或任何您想要的东西,因此复杂性逐渐增加。

这是我最近两份工作中使用 Spring 的第一大卖点。其他要点是:

  • 它不会强迫你使用它的 api 或改变你的架构。同样,这会引导您按照自己的节奏调整其功能。
  • 非常广泛的文档。

当项目成熟时,您的开发人员也会成熟,所以春天最终会派上用场......(在我看来,一开始是免费的)

于 2010-02-03T18:23:00.117 回答
0

我们使用托管的可扩展性框架。它是 .NET 4.0 框架(当前处于候选版本)的一部分,您可以在System.ComponentModel.Composition命名空间中找到它。codeplex 站点目前仍然是最好的文档来源。

MEF 的关注点更多的是“可扩展性”而不是“依赖注入”,但它使用依赖注入来实现这一点。例如,Visual Studio 2010 代码编辑器使用 MEF 来实现可扩展性。

我们将它用作 DI 框架并且还没有遇到任何问题(尽管我确实需要动态实例化示例,它还不是核心的一部分)。

于 2010-02-26T11:44:04.677 回答
0

除了 Ninject 这个很棒的产品之外,还有另外两个我熟悉的选项:

  1. 微软的统一。一些 Alt.NET 人员认为它有点大而复杂。作为 Prism 的一部分,我已经使用它几个月了(使用 Unity 不需要 Prism。它可以独立使用),我发现它简单明了。
  2. 结构图。我发现 StructureMap 也有一个非常温和的学习曲线,并且可以快速提升。

希望这可以帮助。

于 2010-02-03T18:30:38.490 回答
0

看看http://funq.codeplex.com/首先它与 Windsor 和其他基于反射的容器相比非常快其次它非常灵活但仍然具有非常易读的配置(如果你已经了解了Lamba 表达式应该花费很长时间)

于 2010-02-04T10:17:37.220 回答
0

Autofac是我选择的容器。它允许通过 lambda 表达式注册以获得最大的灵活性(链接有一些很好的例子)。

它还具有与 Silverlight 兼容的版本。我不确定其他容器是否可以。

至于放置,容器应该在应用程序启动期间构建。对于 ASP.NET 应用程序,这将在 Global.Application_Start 方法中。

Autofac 具有ASP.NET 集成,它使用您在启动期间构建的容器注入页面实例。

于 2010-02-04T02:06:16.283 回答
0

如果您还熟悉任何 DI 框架,我会选择Simple Injector

它有一个非常简单的 API,可以让您快速入门。虽然简单,但它仍然支持许多高级配置场景的. 该库在设计时考虑了迁移,这意味着切换到另一个框架将相当简单。为了证明这一点,项目的 wiki 上有一个迁移指南

于 2010-03-05T14:54:43.823 回答
-2

我发现 StructureMap 使用起来非常有用且直观。我用 Ninject 玩了一下,发现不太方便,但是 YMMV。我还建议您使用公共服务定位器作为 IOC 的实际实现和应用程序之间的中介。当你想稍后切换你的 IOC/DI 容器时,这不那么痛苦。StructureMap 和 Castle windsor 都有适配器。根据这个博客,我认为通过谷歌搜索也有一个适用于 Ninject 2 的适配器。

于 2010-02-03T18:39:41.963 回答