2014-09-21 76 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>();