4

试图理解 DI。

在自定义类中使用服务/依赖对象的正确方法是什么?

我是否需要将每个类创建为服务并添加到依赖对象?

或者我应该使用 [FromServices] (以前是 beta4 之前的 [Active] )属性。

还是我应该传递一个服务对象来访问它们?

试图理解的是,我如何正确编写自己的类以使用控制器等 DI。

4

1 回答 1

4

[FromServices]只是一个MVC概念。它不适用于 ASP.NET 5 堆栈的其他部分。

如果您想将依赖项向下传递,您有几个选择:

  1. 通过服务提供商。这是一种相当反模式,因为您的对象需要依赖于 DI 容器,而您并没有真正反转控件。
  2. 在构造函数中传递接口。“纯” DI,但您最终可能会遇到参数噩梦(在构造函数中接受 10 个参数的对象)。
  3. 与前一个类似,但在工厂中对依赖项进行分组。更多的 DI 对齐和更少的参数噩梦,但它可以创建工厂的噩梦。
  4. 仅注入顶级大型对象(例如:存储库、整个系统等)。这种方法是依赖噩梦和过多耦合之间的一个很好的权衡。当然,被注入的系统应该彼此独立。此外,每个系统内部都可以有自己的 DI 容器。

!!不要将 DI 与配置混淆。当您依赖合同时,DI 才有意义。当您需要一些特定于当前实现的信息时,配置很有用。

示例:如果您有 an IRepositorythen 您不应该注入连接字符串,因为连接字符串特定于您连接到的系统。在某些情况下,连接字符串没有意义。例如, anInMemoryRepository不需要连接字符串,因此这不是所有实现的常见依赖项。

于 2015-06-10T17:49:46.687 回答