2010-01-14 41 views
3

我有一個項目,我正在嘗試使用DI。我正在使用Unity,並且對於普通程序集和注入來說,事情似乎很有效。通過web.config統一依賴注入WCF服務

我想進一步打破WCF服務的依賴關係。我想注入WCF服務在運行時創建當前不使用DI,我不使用VS .NET生成的代理:

MyService = new ChannelFactory<IMyService>("BasicHttpBinding_IMyService").CreateChannel(); 

端點的上面是在web.config:

<endpoint address="http://localhost:35806/MyService.svc" 
     binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService" 
     contract="Interfaces.IMyService" name="BasicHttpBinding_IMyService" /> 

我試圖找出如何通過web.config中這個WCF服務映射到一個接口,這樣我可以使用構造函數注入

在web.config中的法線貼圖出現使用「mapTo」在那裏你將指定接口別名和以前d類的別名efined。

<type type="IMyService" mapTo="MyService"> 
<lifetime type="singleton"/> 
</type> 

由於WCF服務代理是在運行時動態創建的我沒有這個參考「的MyService」類,而不是它需要從"BasicHttpBinding_IMyService"端點服務拉動。

關於如何完成這一任何想法?

回答

2

我從配置文件中看到這個工作的唯一方法是創建一個實現IMyService的MyService類 - 並在後臺創建自己的Channel(使用ChannelFactory代碼片段),並充當代理。

的而是說,爲什麼不就叫

RegisterInstance<IMyService>(myServiceChannelInstance) 

您的團結容器上,並通過在已創建的MyService通道實例?

+0

+1你剛剛描述的是一個抽象工廠 - 它是常見DI挑戰的標準解決方案之一。 – 2010-01-15 09:23:06

+0

@Bryan:謝謝我意識到我可以在運行時使用該實例來完成此任務,但我試圖堅持使用web.config來完成所有任務。 我想我最終會做的是在我的web.config中將自定義部分映射到接口的服務端點,然後在運行時循環這些部分。這樣它就不必嵌入我的應用程序中。我將暫時打開此文件,以查看是否有人可以使用本機Unity配置部分進行此操作。 – Jay 2010-01-15 19:37:34

1

我寫了一組去年的Unity擴展,實現了這一點。你可以從http://neovolve.codeplex.com/releases/view/19004下載我的工具包,它有這種支持。

查看該工具包的chm文件。 Neovolve.Toolkit.Unity.ProxyParameterValueElement的文檔將描述如何用這個工具包實現你想要的。