我正在使用Unity来解析在参数中需要两个工厂类的存储库。下面是我的存储库构造函数:
//repo constructor
public MyRepo(IChannelClientFactory<IRemotedVisitorChat> chatFactory, IChannelClientFactory<IRemotedVisitorWebsite> siteFactory )
{
ChatFactory = chatFactory;
SiteFactory = siteFactory;
}
ChatFactory和SiteFactory的类型为class RemotingClientFactory<T> : IChannelClientFactory<T>
,其构造函数为:
RemotingClientFactory(string endpointName)
之前,RemotingClientFactory有一个无参数构造函数,但在进行一些重构时,我添加了string endpointName
。
我正在注册我的存储库:
container.RegisterType<IMyRepo, MyRepo>(new HierarchicalLifetimeManager(), new InjectionConstructor(typeof (RemotingClientFactory)));
最初,MyRepo构造函数只有一个参数,RemotingClientFactory没有为其构造函数接受任何参数
我迷失在阅读Unity文档的杂草中。如何为RemotingClientFactory提供初始化字符串?
答案 0 :(得分:1)
首先,您需要注册IChannelClientFactory<T>
实现,指定要为每个实现使用的endpointName
值。 (下面的字符串值应替换为您要使用的endpointName
值)
container.RegisterType<IChannelClientFactory<IRemotedVisitorChat>, RemotingClientFactory<IRemotedVisitorChat>>(new InjectionConstructor("ChatEndpointName"));
container.RegisterType<IChannelClientFactory<IRemotedVisitorWebsite>, RemotingClientFactory<IRemotedVisitorWebsite>>(new InjectionConstructor("WebsiteEndpointName"));
然后您可以注册IMyRepo
实现,MyRepo
的最长构造函数将由unity选择,值将在解析后注入。
container.RegisterType<IMyRepo, MyRepo>();