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提供初始化字符串?

Unity:为InjectionConstructor提供一个参数

首先,您需要注册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>();