2010-09-07 234 views
1

關於Ninject的一個小問題。依賴注入Ninject 2.0

我使用WCF'雙工信道'與服務進行通信。該頻道被定義爲一個界面,爲簡單起見,我們稱它爲IMyChannel。爲了實例化一個通道,我們使用DuplexChannelFactory<IMyChannel>對象的方法CreateChannel()。 到目前爲止,我已經設法用這個綁定工廠類。

Bind< DuplexChannelFactory< IMyChannel>>().ToMethod(context => 
    new DuplexChannelFactory< IMyChannel>(
     new MessageEndPoint(), 
     new NetTcpBinding(), 
     "net.tcp://localhost:8321")).InSingletonScope(); 
    } 
} 

不過我有點不確定如何將IMyChannel接口綁定,因爲我使用Ninject創建DuplexChannelFactory<IMyChannel>所以綁定IMyChannel我做Bind< IMyChannel>(). ???

回答

1

這不是一個真正的IOC容器問題。

雖然,在理論上,你可以這樣做:

Bind<Func<IMyInterface>>().ToConstant(context => context.Kernel.Get<DCF<IMC>>().CreateChannel) 

,然後在你的構造函數需要一個Func<IMyInterface>(),調用它,每當你想創建一個通道。

問題是CreateChannel()返回的對象實現IMyChannelIDisposable,因此如果這就是你要返回的東西,那麼你不能整齊地使用它周圍的using塊。這是您創建服務引用時工具爲您生成的內容,WCF OOTB在此處不提供一般機制。

我個人注入一個工廠,並使其具有一個Create<T>()方法能產生一個包裝對象:

  • 實現IDisposable
  • 具有一種調用穿過通道的方法。

這不是注射到一個職位,所以希望有人很快會與一個很好的包裝類的這種性質。

不知道辛格爾頓是否合適,但我不得不環顧一下。

+0

感謝您的回答魯賓。 Sry爲我的遲到做出了迴應,但突然之間我被其他一些項目絆倒了。但現在回到這個問題上,並會給你一個嘗試的建議並回報。 – Goodiepal 2010-10-11 13:24:29

+0

+1用於在這種情況下建議工廠。 – Arafangion 2011-02-13 23:29:27