Unity:为InjectionConstructor提供参数

时间:2014-09-21 15:57:36

标签: c# dependency-injection unity-container

我正在使用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提供初始化字符串?

1 个答案:

答案 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>();