在运行时检索接口的实现时使用依赖关系注入有什么好处

本文关键字:注入 关系 依赖 什么 检索 运行时 接口 实现 | 更新日期: 2023-09-27 18:35:22

public List<IBusinessObject> RetrieveAllBusinessObjects()
{
    var businessObjectType= typeof(IBusinessObject);
    List<Type> implementationsOfBusinessObject = AppDomain.CurrentDomain.GetAssemblies()
         .SelectMany(s => s.GetTypes())
         .Where(businessObjectType.IsAssignableFrom).ToList();
    return implementationsOfBusinessObject.Select(t =>(IBusinessObject)Activator.CreateInstance(t)).ToList();
}

堆栈溢出的用户建议我应该检查依赖项注入作为上述截图的解决方法。这样做有什么好处?

只是关于场景的一点概述:

我们的数据库几乎没有存储过程,因此我们已经开始为更复杂的表实现 C# 业务对象。由于我们希望尽快切换数据库,这似乎是最佳选择。所有业务对象都必须在运行时使用反射加载,以帮助管理它们。所有这些业务对象都实现了接口 IBusinessObject。

使用依赖注入的建议来自这个问题

编辑:

  1. 方法位于接口后面的类中,因此可以直接测试

  2. 如果改变任何东西,我们使用AutoFac。我们不使用单独的配置文件。

-

在运行时检索接口的实现时使用依赖关系注入有什么好处

而不是使用上面的代码,您只需使用在应用程序的配置文件中配置的 DI,但有时您也可以在方法中装饰属性或参数,然后当请求访问该对象或将在参数。

它还使它更具可测试性,因为您可以创建实现接口的不同具体类型,然后不必重新编译代码,只需通过配置文件和 viola 轻弹映射......所有作品。

DI 无需编写代码即可完成上述操作,因此引入错误的机会更少。

DI 为您提供了更多好处,例如

  • 使测试单个代码单元变得更加容易。可以模拟依赖项,因此可以限制要测试的代码
  • 易于理解代码中的依赖项。依赖项通常会在某些地方注入,通常是构造函数。
  • 链接到上面的1/,因为你现在应该在你的代码之间定义接口,当你的需求改变并且你需要重写一个组件时,你可以以更高的信心来做到这一点,它将与你现有的代码库一起工作。
还有其他好处,

其他人可能会更好地描述,但您需要根据需要评估这些好处。