在方法中使用 List<T> 进行依赖倒置
Dependency Inversion with a List<T> in a method
如何在给定的 class 上实现依赖倒置,如以下代码?
问题是 class A 中的函数 "Add",它包含新的关键字。
我正在使用 Autofac 进行依赖注入。
我应该创建一个 "IBFactory" 并在我的 Autofac 中注册,还是使用方法注入,或者完全不同的东西?
public class A {
List<B> _list = new List<B>();
ILogger _logger;
public A(ILogger logger) { //Depency Injection using Autofac
_logger = logger;
}
public Add(object X) {
if (X is String)
_list.Add(new B1());
else
_list.Add(new B2());
}
}
public interface B {
}
public class B1 : B {
}
public class B2 : B {
}
工厂委托可以用作所需类型的工厂
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());
}
}
If type T
is registered with the container, Autofac will automatically resolve dependencies on Func<T>
as factories that create T
instances through the container.
引用Autofac: Delegate Factories
如何在给定的 class 上实现依赖倒置,如以下代码? 问题是 class A 中的函数 "Add",它包含新的关键字。
我正在使用 Autofac 进行依赖注入。
我应该创建一个 "IBFactory" 并在我的 Autofac 中注册,还是使用方法注入,或者完全不同的东西?
public class A {
List<B> _list = new List<B>();
ILogger _logger;
public A(ILogger logger) { //Depency Injection using Autofac
_logger = logger;
}
public Add(object X) {
if (X is String)
_list.Add(new B1());
else
_list.Add(new B2());
}
}
public interface B {
}
public class B1 : B {
}
public class B2 : B {
}
工厂委托可以用作所需类型的工厂
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());
}
}
If type
T
is registered with the container, Autofac will automatically resolve dependencies onFunc<T>
as factories that createT
instances through the container.