我遇到过一些看起来像这样的代码:
# 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如何设法创建它的实例?
答案 0 :(得分:1)
Unity和几乎所有其他服务容器/服务解析器/服务定位器,通过分析可用的构造函数,找到“最佳”,然后注入参数来工作。
那么,这些参数来自哪里?从服务容器本身。
例如,如果你有这项服务:
interface IService { ... }
class ServiceImplementation : IService
{
public ServiceImplementation(IOtherService os, IThirdService ts) { ... }
}
然后当您解决IService
时,Unity会尝试递归解析IOtherService
和IThirdService
。如果实现这些服务的实际类也需要其他服务,它会递归执行此解决方案,直到一切正常。
所以基本上你可以想到这样的分辨率调用:
var os = container.Resolve<IOtherService>();
var ts = container.Resolve<IThirdService>();
return new ServiceImplementation(os, ts);