如何在 IUnityContainer 的构造函数中正确定义抽象类型的 ParameterOverride

How proper define ParameterOverride for abstract type in constructor for IUnityContainer

我有一些 classes:

public class Inspector
{
        private readonly BaseType someType;

        public Inspector(BaseType someType)
        {
            this.someType= someType;
        }
}

public abstract class BaseType {}

public class TypeA : BaseType {}

public class TypeB : BaseType {}

并为它们设置 IoC 容器:

var container = new UnityContainer();
container.RegisterType<Inspector>();

然后在运行时我调用了这样的东西:

var typeA = new TypeA(); //It could be also TypeB
var inspector = container.Resolve<Inspector>(new ParameterOverride(typeA.GetType(), typeA));

但是这个 Resolve<Inspector>() 给了我一个例外: 当前类型 BaseType 是抽象的 class,无法构造。您是否缺少类型映射? 看起来参数覆盖被忽略,容器尝试在其中查找 BaseType 注册。当然注册TypeA和TypeB并不能解决问题。无论如何,我不想在容器中注册 BaseType 的所有子类型,因为有很多 classes.

UnityContainer 尝试解析 BaseType,而不是从 BaseType.

继承的类型

因此您需要为 BaseType 创建覆盖:

var inspector = container.Resolve<Inspector>(new ParameterOverride(typeof(BaseType), typeA));