1

我打电话

mActionLogManager = container.Resolve<IActionLogManager>();

并且在调试时我看到它只通过非默认 ctor

  public ActionLogManager(IUnityContainer container)
        {
            Init(container);
        }

unity总是调用无参数的ctor吗?

我试图编写和删除无参数 ctor。

  • 它存在的时候没有经过它,

  • 并且在丢失时没有抛出异常。

更新: 如果是这样,它如何知道要在 ctor 中填写哪些参数?

4

2 回答 2

3

这是 Unity 的默认行为。它尝试通过使用具有最多参数的 ctor 来解析实例。如果要指示 Unity 使用默认 ctor,则需要按如下方式注册类型:

container.Register<IActionLogManager,MyActionLogManager>(new InjectionConstructor());
于 2012-05-30T06:20:26.230 回答
2

给定多个构造函数的选择,Unity 将调用具有最多参数的构造函数 - 以提供最丰富的服务集。如果要覆盖它,请将[InjectionConstructor]属性添加到要调用的构造函数中。

来自MSDN

当一个目标类包含多个构造函数时,Unity 将使用应用了 InjectionConstructor 属性的那个。如果有多个构造函数,并且没有一个带有 InjectionConstructor 属性,Unity 将使用参数最多的构造函数。如果有多个具有相同参数数量的“最长”构造函数,Unity 将引发异常。

于 2012-05-30T06:19:06.997 回答