我有一些课程:
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是一个抽象类,无法构造。您是否缺少类型映射?看起来参数覆盖被忽略,容器尝试在其中查找BaseType注册。当然,注册TypeA和TypeB并不能解决问题。无论如何,我不想在容器中注册BaseType的所有子类型,因为有很多类。
[UnityContainer
尝试解析BaseType
,而不是从BaseType
继承的类型。
因此您需要为BaseType
创建替代:
var inspector = container.Resolve<Inspector>(new ParameterOverride(typeof(BaseType), typeA));