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

C# 是否可以将接口作为松耦合的参数,c#,interface,dependency-injection,loose-coupling,C#,Interface,Dependency Injection,Loose Coupling,我看到的大多数依赖项注入示例都是在构造函数中注入的。在我的情况下,我不能通过构造函数或任何DI工具注入依赖项。因此,我有一个接口作为方法的参数。我想知道这是否是一种不好的方法,以及与构造函数注入相比它有哪些缺点。方法级依赖关系没有问题,即仅依赖于单个方法,将该依赖项作为接口传递没有问题。方法级依赖项没有问题,即,仅作为单个方法的依赖项,并且将该依赖项作为接口传递没有问题。这是完全可以接受的 一些警告: 除非该方法被称为Init,否则它只能在该函数中使用,否则该类的用户会感到非常困惑 确保函数的所

我看到的大多数依赖项注入示例都是在构造函数中注入的。在我的情况下,我不能通过构造函数或任何DI工具注入依赖项。因此,我有一个接口作为方法的参数。我想知道这是否是一种不好的方法,以及与构造函数注入相比它有哪些缺点。

方法级依赖关系没有问题,即仅依赖于单个方法,将该依赖项作为接口传递没有问题。

方法级依赖项没有问题,即,仅作为单个方法的依赖项,并且将该依赖项作为接口传递没有问题。

这是完全可以接受的

一些警告:

除非该方法被称为Init,否则它只能在该函数中使用,否则该类的用户会感到非常困惑

确保函数的所有调用者都可以访问所需的接口


我想不出有什么缺点,您只是传递了一个参数:

这是完全可以接受的

一些警告:

除非该方法被称为Init,否则它只能在该函数中使用,否则该类的用户会感到非常困惑

确保函数的所有调用者都可以访问所需的接口


我想不出有什么缺点,您只是传递了一个参数:

将依赖项传递给一个方法是绝对好的,事实上,它是依赖项注入原则允许/接受的范例之一,另一个是

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

属性注入/Setter注入-使用属性传递依赖项。这也是一个更广泛使用的范例。以及

方法注入—使用方法传递依赖项


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

将依赖项传递给方法是绝对正确的,事实上,这是依赖项注入原则允许/接受的范例之一,别人在

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

属性注入/Setter注入-使用属性传递依赖项。这也是一个更广泛使用的范例。以及

方法注入—使用方法传递依赖项


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

+1用于提及不同级别的依赖项+1用于提及不同级别的依赖项+1用于调用方法名称中的语义以及它们与对象状态的关系。名为Init、Initialize或Setup的方法显然是为了更改对象的状态而设计的。+1用于调用方法名称中的语义以及它们与对象状态的关系。名为Init、Initialize或Setup的方法显然是为了更改对象的状态而设计的。您还需要对属性注入方法执行注入检查。否则,答案很好!您还需要对属性注入方法执行注入检查。否则,答案很好!