注入具有具体类型的泛型接口是否会破坏依赖注入的目的?
本文关键字:注入 依赖 泛型接口 类型 是否 | 更新日期: 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>) { }
}
两个具体类的注入是否违背了依赖注入的目的?我的感觉是这样的,因为我们现在与Pasta
和Cake
类是强耦合的,而依赖注入是用来打破这种耦合的。
下面的内容更有意义吗?
public class Chef<IDinner, IDesert>
{
public Chef(IRestaurant<IDinner, IDesert>) { }
}
我认为你在这里混淆了概念——无论你使用接口还是具体类本身,DI本身都没有任何关系。您可以(例如)注入一个具体类,它是Pasta的几个子类之一(Linguini
, Ravioli
等)。,并且DI(低耦合、离散可测试性)的优点仍然适用。
大多数人使用接口,因为这进一步降低了与您需要的特定接口的耦合,而不意味着任何实现(例如,可能从Pasta
继承GlutenFreeElbowNoodles
没有意义),但这并不是真正的IoC关注。