Unity:为InjectionConstructor提供一个参数
本文关键字:一个 参数 InjectionConstructor Unity | 更新日期: 2023-09-27 18:23:52
我正在使用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提供初始化字符串?
首先,您需要注册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>();