unity如何解析构造函数的参数?

时间:2015-06-03 12:38:37

标签: c# unity-container

我遇到过一些看起来像这样的代码:

# A Comment # Another comment :127.100.100.255:Something .789 .123 .456 :127.200.200.100:Something Else .an.example.com # <---- .bravo.example.com # <---- NOW this list noperiod.example.com # <---- IS ordered ;-) .some.example.com # <----

在网络配置中包含从var something = this.container.Resolve<ICatManager>();ICatManager的映射。

但是,CatManager有一个构造函数,它接受2个参数,没有默认的构造函数。

Unity如何设法创建它的实例?

1 个答案:

答案 0 :(得分:1)

Unity和几乎所有其他服务容器/服务解析器/服务定位器,通过分析可用的构造函数,找到“最佳”,然后注入参数来工作。

那么,这些参数来自哪里?从服务容器本身。

例如,如果你有这项服务:

interface IService { ... }
class ServiceImplementation : IService
{
    public ServiceImplementation(IOtherService os, IThirdService ts) { ... }
}

然后当您解决IService时,Unity会尝试递归解析IOtherServiceIThirdService。如果实现这些服务的实际类也需要其他服务,它会递归执行此解决方案,直到一切正常。

所以基本上你可以想到这样的分辨率调用:

var os = container.Resolve<IOtherService>();
var ts = container.Resolve<IThirdService>();
return new ServiceImplementation(os, ts);