Unity不使用类的默认构造函数
我有这堂课:
public class Repo { public Repo() : this(ConfigurationManager.AppSettings["identity"], ConfigurationManager.AppSettings["password"]) { } public Repo(string identity,string password) { //Initialize properties. } }
我在web.config中添加了一行,以便Unity容器自动构建此类型。
但在执行我的应用程序期间,我收到此错误消息:
"System.InvalidOperationException : the parameter identity could not be resolved when attempting to call constructor Repo(String identity, String password) -->Microsoft.Practices.ObjectBuilder2.BuildFailedException : The current Build operation ...."
1)为什么Unity不使用默认构造函数?
2)假设我希望Unity使用第二个构造函数(参数构造函数),如何通过配置文件将该信息传递给Unity?
Unity默认选择具有最多参数的构造函数。 你必须告诉Unity明确地使用另一个。
一种方法是使用[InjectionConstructor]属性,如下所示:
using Microsoft.Practices.Unity; public class Repo { [InjectionConstructor] public Repo() : this(ConfigurationManager.AppSettings["identity"], ConfigurationManager.AppSettings["password"]) { } public Repo(string identity,string password) { //Initialize properties. } }
第二种方法是,如果您反对使用属性来混淆类/方法,则指定在使用InjectionConstructor配置容器时使用哪个构造函数:
IUnityContainer container = new UnityContainer(); container.RegisterType(new InjectionConstructor());
从文档 :
Unity如何解析目标构造函数和参数
当目标类包含多个构造函数时,Unity将使用应用了InjectionConstructor属性的构造函数。 如果有多个构造函数,并且没有构造函数携带InjectionConstructor属性,Unity将使用具有最多参数的构造函数。 如果有多个这样的构造函数(多于一个具有相同参数数量的“最长”),Unity将引发exception。
只是尝试以这种方式注册类型:
由于constructor
元素中没有指定param
元素,因此它应该调用默认构造函数。
您也可以在代码中进行此注册:
上述就是C#学习教程:Unity不使用类的默认构造函数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
container.RegisterType(new InjectionConstructor());
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012330.html