作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正尝试开始使用 C# 进行一些简单的依赖项注入(inject),但我遇到了一个我似乎无法找到答案的问题。
我有一个由另一个部门编写的类,我的项目中没有该类的源代码。我想通过使用接口(interface)的构造函数注入(inject)这种类型的对象,但是当然,当将对象转换为接口(interface)类型时,我不能更改注入(inject)的对象实现来实现接口(interface)以实现多态性。
我所见过的关于此技术的每个学术示例都使用了在项目本身中声明的类。如果源代码在项目中不可用,我将如何注入(inject)我的依赖项?
我希望这是有道理的,谢谢。
最佳答案
您可以围绕您的目标类型创建一个包装器,例如,您可以拥有一个它们提供的类:
public class TheirClass
{
public void DoSomething();
}
你可以定义一个接口(interface):
public interface ITheirClass
{
void DoSomething();
}
并在包装器类上实现该接口(interface):
public class TheirClassWrapper : TheirClass, ITheirClass
{
}
或者,如果他们提供的类是密封的,您需要稍微改变一下:
public class TheirClassWrapper : ITheirClass
{
private TheirClass instance = new TheirClass();
public void DoSomething()
{
instance.DoSomething();
}
}
然后您可以注入(inject)该接口(interface)。
我知道在 MEF 中我们可以导出具体类型并正确注入(inject)它们,但我不确定其他 IoC 容器。
关于C# 依赖项注入(inject) - 如何在没有源代码的情况下注入(inject)依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3059548/
我是一名优秀的程序员,十分优秀!