C# 使用列表进行依赖项反转<;T>;以某种方式
如何在给定的类上实现依赖项反转,如下面的代码? 问题是类A中的函数“Add”,它包含new关键字 我正在使用Autofac进行依赖项注入 我应该创建一个在Autofac中注册的“IBFactory”,还是使用方法注入,或者完全其他的方法C# 使用列表进行依赖项反转<;T>;以某种方式,c#,dependency-injection,autofac,factory,dependency-inversion,C#,Dependency Injection,Autofac,Factory,Dependency Inversion,如何在给定的类上实现依赖项反转,如下面的代码? 问题是类A中的函数“Add”,它包含new关键字 我正在使用Autofac进行依赖项注入 我应该创建一个在Autofac中注册的“IBFactory”,还是使用方法注入,或者完全其他的方法 公共A类{ 列表_List=新列表(); ILogger\u记录器; 公共A(ILogger记录器){//使用Autofac的依赖注入 _记录器=记录器; } 公共添加(对象X){ if(X是字符串) _添加(新B1()); 其他的 _添加(新的B2()); }
公共A类{
列表_List=新列表();
ILogger\u记录器;
公共A(ILogger记录器){//使用Autofac的依赖注入
_记录器=记录器;
}
公共添加(对象X){
if(X是字符串)
_添加(新B1());
其他的
_添加(新的B2());
}
}
公共接口B{
}
公开课B1:B{
}
公开课B2:B{
}
工厂代理可以在act中用作所需类型的工厂
public class A {
List<B> _list = new List<B>();
private readonly ILogger logger;
private readonly Func<B1> factory1;
private readonly Func<B2> factory2;
public A(ILogger logger, Func<B1> factory1, Func<B2> factory2) {
//Depency Injection using Autofac
this.logger = logger;
this.factory1 = factory1;
this.factory2 = factory2;
}
public Add(object X) {
if (X is String)
_list.Add(factory1());
else
_list.Add(factory2());
}
}
公共A类{
列表_List=新列表();
专用只读ILogger记录器;
专用只读功能工厂1;
专用只读功能工厂2;
公共A(ILogger记录器,Func factory1,Func factory2){
//使用Autofac的依赖性注射
this.logger=记录器;
this.factory1=factory1;
this.factory2=factory2;
}
公共添加(对象X){
if(X是字符串)
_添加(factory1());
其他的
_添加(factory2());
}
}
如果在容器中注册了类型T
,则Autofac将自动将对Func
的依赖关系解析为通过容器创建T
实例的工厂
参考资料:您是否在询问每次需要时如何通过Autofac实例化
B1
和B2
?添加方法的返回类型是什么?@John Yes,基于给定的argument@ValeriuSeremet返回类型不重要,这只是一个示例即使使用依赖项注入,有时也可以只做newb1()
或newb2()
例如,如果B的实现是应用程序逻辑中的简单数据对象或叶节点,那么伪造它们通常没有什么好处,工厂的额外抽象层只是额外的抽象层。非常感谢!这正是我要找的