asp.net 5自定义类中的依赖注入,正确的方法是什么?

时间:2015-06-10 14:31:03

标签: c# dependency-injection asp.net-core asp.net5

试图理解DI。

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

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

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

或者是否应该传递一个服务对象来访问它们?

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

1 个答案:

答案 0 :(得分:4)

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

如果你想在链中传递依赖关系,你有几个选择:

  1. 通过服务提供商。这是一个非常反模式,因为你的对象需要依赖于DI容器而你并没有真正反转控件。
  2. 在构造函数中传递接口。 “纯粹的”DI,但你最终可能会遇到一个参数噩梦(在构造函数中占用10个参数的对象)。
  3. 与前一个类似,但工厂中的组依赖关系。更多的DI对齐和更少的参数噩梦,但它可以造成工厂的噩梦。
  4. 仅注入顶级大型对象(例如:存储库,整个系统等)。这种方法是依赖性梦魇和过多耦合之间的一个很好的权衡。当然,注入的系统应该彼此独立。此外,每个系统内部都有自己的DI容器。
  5. !!不要将DI与配置混淆。当你依赖合同时,DI是有意义的。当您需要某些特定于当前实现的信息时,配置很有用。

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