是否可以将接口作为松耦合的参数

时间:2014-04-14 21:56:27

标签: c# interface dependency-injection loose-coupling

我已经看到了依赖注入的大多数示例,依赖项是在构造函数中注入的。在我的情况下,我不能通过构造函数或任何DI工具注入依赖项。所以,我有一个接口作为方法的参数。我想知道它是否是一个糟糕的方法,它对构造函数注入有什么缺点。

3 个答案:

答案 0 :(得分:3)

方法级依赖项(即只是单个方法的依赖项)没有任何问题,将该依赖项作为接口传递没有任何问题。

答案 1 :(得分:3)

这是完全可以接受的。

一些警告:

  1. 除非调用该方法" Init"它只应该在该函数中使用(否则对该类用户非常困惑)。

  2. 确保该函数的所有调用者都可以访问所需的接口(显然)。

  3. 没有任何"缺点"我能想到,你只是传递一个参数:)

答案 2 :(得分:2)

将依赖关系传递给方法是绝对正确的,实际上它是依赖注入原则的允许/接受范式之一,其他方法

构造函数注入 - 通过构造函数传递依赖项的位置。最广泛使用的范例。

Property Injection / Setter Injection - 使用属性传递依赖项的位置。再次成为更广泛使用的范例之一。而且,

方法注入 - 使用方法传递依赖项的位置。

现在使用Method Injection有一些优点/缺点。一个明显的优点是Method Injection绝对是可选的。如果您不需要特定实例中的依赖项,则不要调用注入依赖项的方法。另一方面,在调用需要访问依赖项的类的其他方法时,您需要检查以确保已经注入了依赖项。