使用unity解析具有多个构造函数的实例

Fat*_*ert 19 c# ioc-container unity-container

我想使用unity创建一个类的实例,其中类有两个具有相同参数数量的构造函数.

这是实例化:

_unityContainer.Resolve<IGradeType>(new ParameterOverride("gradeTypeStringFromXmlFile", gradeTypeStringFromXmlFile));
Run Code Online (Sandbox Code Playgroud)

以下是构造函数:

    public GradeType(string gradeTypeStringFromXmlFile)
    {
        _gradeTypeStringFromXmlFile = gradeTypeStringFromXmlFile;
    }

    public GradeType(Enum.GradeType gradeType)
    {
        _gradeType = gradeType;
    }
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样做,我得到一个例外,说明 类型GradeType有多个长度为1的构造函数.无法消除歧义.

我可以在一个构造函数上设置属性[InjectionConstructor]以使其与一个一起工作,但是我不能使用另一个构造函数创建一个具有单元的实例.

是否有一些方法让多个构造函数具有相同数量的参数并仍然使用unity来创建实例?

nem*_*esv 28

是的,可以告诉Unity它应该使用哪个构造函数,但只有在注册类型时才能这样做InjectionConstructor.如果你想使用两个构造函数,它甚至会很复杂,因为你必须在注册时命名注册并使用该名称.

使用Unity版本2.1.505构建的示例:

var continer = new UnityContainer();

continer.RegisterType<IGradeType, GradeType>("stringConstructor", 
    new InjectionConstructor(typeof(string)));

continer.RegisterType<IGradeType, GradeType>("enumConstructor",
    new InjectionConstructor(typeof(EnumGradeType)));

IGradeType stringGradeType = continer.Resolve<IGradeType>("stringContructor" , 
    new DependencyOverride(typeof(string), "some string"));

IGradeType enumGradeType = continer.Resolve<IGradeType>("enumConstructor", 
    new DependencyOverride(typeof(EnumGradeType), EnumGradeType.Value));
Run Code Online (Sandbox Code Playgroud)