c# - 使用依赖注入(inject)是否需要使用要注入(inject)的接口(interface)而不是具体类?

标签 c# dependency-injection

我听一位在职的开发人员提到,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 会让你的测试更容易/更好。

http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

关于c# - 使用依赖注入(inject)是否需要使用要注入(inject)的接口(interface)而不是具体类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17304488/

相关文章:

javascript - Angularjs - 我在注入(inject)方面做错了什么?

c# - 从组合根解析交互式请求的 View 模型?

c# - 无法使用 Simple Injector 注册 Api Controller?

c# - 通过拇指调整用户控件的 wpf 大小与拖动不成比例

c# - CSharpCodeProvider 似乎停留在.NET 2.0,我如何获得新功能?

c# - 从 MVC View 模型保存重新排序的列表项

dependency-injection - 如何在 NestJS 中获取依赖树/图?

c++ - 使用依赖注入(inject)设计工厂类

C# 检查 url 是否存在?

c# - 自动加载 32 位/64 位程序集