在方法中使用 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