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

问题描述 投票:2回答:1

我有一些课程:

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的所有子类型,因为有很多类。

.net dependency-injection unity-container
1个回答
1
投票

[UnityContainer尝试解析BaseType,而不是从BaseType继承的类型。

因此您需要为BaseType创建替代:

var inspector = container.Resolve<Inspector>(new ParameterOverride(typeof(BaseType), typeA));
© www.soinside.com 2019 - 2024. All rights reserved.