gpt4 book ai didi

c# - 使用统一解析具有多个构造函数的实例

转载 作者:IT王子 更新时间:2023-10-29 04:43:18 29 4
gpt4 key购买 nike

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

这是实例化:

_unityContainer.Resolve<IGradeType>(new ParameterOverride("gradeTypeStringFromXmlFile", gradeTypeStringFromXmlFile));

构造函数如下:

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

public GradeType(Enum.GradeType gradeType)
{
_gradeType = gradeType;
}

如果我尝试这样做,我会得到一个异常,提示 GradeType 类型有多个长度为 1 的构造函数。无法消除歧义

我可以在一个构造函数上设置属性 [InjectionConstructor] 以使其与一个构造函数一起使用,但是我无法使用另一个构造函数创建具有统一性的实例。

有没有办法让多个构造函数具有相同数量的参数并仍然使用统一来创建实例?

最佳答案

是的,可以告诉 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));

关于c# - 使用统一解析具有多个构造函数的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8853106/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com