当我的具体类有两个构造函数时,Microsoft.Unity不会Unity.Resolve <ilogger>吗?</ilogger>

时间:2010-08-26 16:32:20

标签: c# c#-4.0 unity-container

我有一个具体的logger类,Microsoft.Unity会将ILogger解析为。{/ p>

logger类有两个构造函数:

1. public logger()
2. public logger(List<BaseLogger> Loggers)

我的web.config文件中有unity部分,如下所示:

<unity>
<containers>
  <container>
    <types>

      <type type="MyCompany.Logger.ILogger, MyCompany.Logger"
           mapTo="MyCompany.Logger.logger, MyCompany.Logger">

      </type>
    </types>
   </container>
  </containers>
</unity>

如果我删除列为2的构造函数,Unity会成功解析记录器类。当我把它添加回来时,我得到了这个错误......

  

依赖项的解析失败,type =“MyCompany.Logger.ILogger”,name =“(none)”。   在解决时发生异常:   异常是:InvalidOperationException - 类型List`1有多个长度为1的构造函数。无法消除歧义。

任何人都可以解释我如何更改我的web.config条目来处理“2”。在logger中列出重载的构造函数,以便在尝试Unity.Resolve时工作?

1 个答案:

答案 0 :(得分:3)

Unity默认尝试使用具有最大参数数量的构造函数创建实例。

为了指定使用哪一个,您需要使用构造函数注入。您可以将构造函数标记为与InjectionConstructor属性一起使用,也可以在配置中指定构造函数。 This应该有所帮助。

我理解MSDN上的文档不够好。如果有帮助,请参阅this。我无法找到我今天在办公室阅读的文章的链接。这有很好的描述。祝你好运,如果你能找到一个或更好的一个。