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)
| 归档时间: |
|
| 查看次数: |
18423 次 |
| 最近记录: |