我打电话
mActionLogManager = container.Resolve<IActionLogManager>();
并且在调试时我看到它只运行非默认的ctor
public ActionLogManager(IUnityContainer container)
{
Init(container);
}
unity
是否总是调用无参数ctor?
我试图编写并删除无参数ctor。
当它存在时,它没有通过它,
并且在丢失时没有抛出异常。
更新 如果是这样,它如何知道要在ctor中填充哪些参数?
答案 0 :(得分:3)
这是Unity的默认行为。它尝试使用具有最多参数的ctor来解析实例。如果要指示Unity使用默认ctor,则需要按如下方式注册类型:
container.Register<IActionLogManager,MyActionLogManager>(new InjectionConstructor());
答案 1 :(得分:2)
如果选择了几个构造函数,Unity将调用具有 most 参数的构造函数 - 来提供最丰富的服务集。如果要覆盖它,请将[InjectionConstructor]
属性添加到要调用的构造函数中。
来自MSDN:
当目标类包含多个构造函数时,Unity将使用具有应用了InjectionConstructor属性的构造函数。如果有多个构造函数,并且没有构造函数携带InjectionConstructor属性,Unity将使用具有最多参数的构造函数。如果有多个具有相同参数数量的“最长”的构造函数,Unity将引发异常。