注入具有具体类型的泛型接口是否会破坏依赖注入的目的?

本文关键字:注入 依赖 泛型接口 类型 是否 | 更新日期: 2023-09-27 18:11:48

考虑以下场景。

public interface IRestaurant<IDinner, IDesert> { }
public class Pasta : IDinner {}
public class Cake : IDesert {}
public class Chef 
{
    // resolving a mix of interfaces and concrete classes
    public Chef(IRestaurant<Pasta, Cake>) { }
}

两个具体类的注入是否违背了依赖注入的目的?我的感觉是这样的,因为我们现在与PastaCake类是强耦合的,而依赖注入是用来打破这种耦合的。

下面的内容更有意义吗?

public class Chef<IDinner, IDesert>
{
    public Chef(IRestaurant<IDinner, IDesert>) { }
}

注入具有具体类型的泛型接口是否会破坏依赖注入的目的?

我认为你在这里混淆了概念——无论你使用接口还是具体类本身,DI本身都没有任何关系。您可以(例如)注入一个具体类,它是Pasta的几个子类之一(Linguini, Ravioli等)。,并且DI(低耦合、离散可测试性)的优点仍然适用。

大多数人使用接口,因为这进一步降低了与您需要的特定接口的耦合,而不意味着任何实现(例如,可能从Pasta继承GlutenFreeElbowNoodles没有意义),但这并不是真正的IoC关注。