我听一位在职的开发人员提到,DI 的重点应该是接口(interface)的使用。作为经验法则,应将具体类的使用保持在最低限度。如果我们将 DI 配置为使用特定类的实例不止少数,那么它就是一种代码味道。
现在我不确定我是否可以将此作为直截了当的规则。我一直觉得使用 DI 的一个重要原因是易于测试。
使用接口(interface)可能有其他原因,而不是具体类作为我代码中的依赖项(比如易于插入逻辑的其他实现等),但我看不出依赖注入(inject)的使用意味着什么那个。
编辑:假设我有一个 BookingMapper 类,它将 Booking 对象从一个域映射到另一个域。假设它有一个酒店对象,它需要将其映射为映射预订的一部分。它使用 HotelMapper 类来执行相同的操作。
public class Booking
{
...
Hotel Hotel;
}
public class BookingMapper
{
private readonly HotelMapper hotelMapper;
public BookingMapper(HotelMapper hotelMapper)
{
this.hotelMapper = hotelMapper;
}
Map(){...}
}
public class HotelMapper
{
Map(){...}
}
在这样的用例中,我已经知道我的 Booking Mapper 组件在任何时候都将与我的 HotelMapper 处于同一级别,并且由于单一职责原则将其分开 enter link description here .提取出像
这样的界面对我来说仍然有意义吗?public interface IHotelMapper
{
void Map();
}
public class BookingMapper
{
private readonly IHotelMapper hotelMapper;
public BookingMapper(IHotelMapper hotelMapper)
{
this.hotelMapper = hotelMapper;
}
Map(){...}
}
然后将其用作 BookingMapper 中的依赖项而不是直接使用 HotelMapper?
最佳答案
看一看SOLID
原则,然后再看一遍。您会看到 DI 和基于接口(interface)的设计是 OOP 的重要组成部分。它认为您会同意您的同事说得很有道理。是的,你说得对,DI 会让你的测试更容易/更好。
关于c# - 使用依赖注入(inject)是否需要使用要注入(inject)的接口(interface)而不是具体类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17304488/