如何在 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));
我有一些 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));