2014-09-21 88 views
1

我正在使用Unity来解析需要参数中两个工厂类的存储库。下面是我的仓库的构造:Unity:为InjectionConstructor提供参数

//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

您是否尝试过使用半手动'InjectionFactory'方法? – 2014-09-21 16:00:15

+0

如果我能找到我正在尝试做的答案,我打算使用它 – 2014-09-21 16:04:09

+0

“ChatFactory”和“SiteFactory”的每个类是分别从'RemotingClientFactory '和'RemotingClientFactory '派生的吗? – Lukazoid 2014-09-21 16:07:05

回答

1

首先,您需要注册您的IChannelClientFactory<T>实现,并指定endpointName值用于每个值。

container.RegisterType<IChannelClientFactory<IRemotedVisitorChat>, RemotingClientFactory<IRemotedVisitorChat>>(new InjectionConstructor("ChatEndpointName")); 
container.RegisterType<IChannelClientFactory<IRemotedVisitorWebsite>, RemotingClientFactory<IRemotedVisitorWebsite>>(new InjectionConstructor("WebsiteEndpointName")); 

(下面的字符串值应该与你希望使用endpointName值替换)然后,你可以注册IMyRepo实施,MyRepo最长的构造函数将被统一进行选择和值在解析后注入。

container.RegisterType<IMyRepo, MyRepo>();