我遇到了一些代码,看起来像这样:
var something = this.container.Resolve<ICatManager>();
其在web配置中具有从ICatManager
到CatManager
的映射。
然而,CatManager有一个接受2个参数的构造函数,没有默认的构造函数。
unity是如何创建它的实例的呢?
发布于 2015-08-07 17:24:41
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);
https://stackoverflow.com/questions/30620342
复制相似问题