我試圖用依賴注入來鎖定WCF。我發現的所有示例都基於假設您使用.svc(ServiceHostFactory)服務或使用app.config來配置容器。其他的例子也是基於容器被傳遞給類。WCF和Unity - 依賴注入
我想要一個解決方案,其中容器不傳遞(不緊密耦合到Unity)。我沒有使用配置文件來配置容器,以及我使用自託管服務的位置。
問題是 - 正如我所見 - ServiceHost將服務實現的類型作爲參數使用,因此使用InstanceProvider有什麼不同?
溶液我已經想出了此刻是註冊的ServiceHost(或專門化)的註冊的名稱(例如container.RegisterInstance<Type>("ServiceName", typeof(Service);
)一個類型。
然後container.RegisterType<UnityServiceHost>(new InjectionConstructor(new ResolvedParameter<Type>("ServiceName")));
註冊ServiceHost。
有更好的解決方案嗎?我可能是我的假設方式。
最好的問候,
邁克爾
是的,我不喜歡繞過容器。我會嘗試使用泛型。 – Michael 2010-03-23 15:16:14
什麼時候在InstanceProvider上調用GetInstance?當我打開服務主機? – Michael 2010-03-23 15:17:29
您只能在這三個WCF類(ServiceHostFactory,ServiceHost和IInstanceProvider)中傳遞容器。這幾乎不是Service Locator的反模式 - 它只是DI基礎設施。你甚至可以創建一個圍繞Unity的通用庫。溫莎城堡的WcfFacility就是這麼做的。要回答您的其他問題:每次調用服務操作時都會調用GetInstance。 – 2010-03-23 15:23:18