我想使用 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 来创建实例?
是的,可以告诉 Unity 应使用哪个构造函数,但只有在使用以下方式注册类型时才能执行此操作InjectionConstructor http://msdn.microsoft.com/en-us/library/microsoft.practices.unity.injectionconstructor.aspx。如果您想使用这两个构造函数,那就更复杂了,因为您必须命名您的注册并在解析时使用该名称。
使用 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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)