我想在WCF中注入我的接口的實現,但我想在WCF的客戶端中初始化我的依賴注入容器。因此,我可以爲我的服務的每個客戶端提供不同的實施。依賴注入wcf
Q
依賴注入wcf
5
A
回答
16
當您使用svcutil.exe的或添加服務引用嚮導在Visual Studio中,許多類型的自動生成的將是客戶端接口之一。我們稱之爲IMyService
。還會有另一個自動生成的接口,被稱爲類似IMyServiceChannel
的實現IMyService和IDisposable的接口。在客戶端應用程序的其餘部分中使用此抽象。
既然你希望能夠創建一個新的渠道,並再次關閉它,你可以引入一個抽象工廠:
public interface IMyServiceFactory
{
IMyServiceChannel CreateChannel();
}
在您的客戶端應用程序的其餘部分,你可以採取IMyServiceFactory的依賴:
public class MyClient
{
private readonly IMyServiceFactory factory;
public MyClient(IMyServiceFactory factory)
{
if (factory == null)
{
throw new ArgumentNullException("factory");
}
this.factory = factory;
}
// Use the WCF proxy
public string Foo(string bar)
{
using(var proxy = this.factory.CreateChannel())
{
return proxy.Foo(bar);
}
}
}
您可以創建一個具體的實施IMyServiceFactory的一個包裝WCF的ChannelFactory<T>
作爲一種實現:
public MyServiceFactory : IMyServiceFactory
{
public IMServiceChannel CreateChannel()
{
return new ChannelFactory<IMyServiceChannel>().CreateChannel();
}
}
您現在可以通過將IMyServiceFactory映射到MyServiceFactory來配置您的DI容器。下面是它是如何在溫莎城堡進行:
container.Register(Component
.For<IMyServiceFactory>()
.ImplementedBy<MyServiceFactory>());
1
以下是我從你的問題的理解:
您有不與WCF的接口。我們稱之爲IInterface
您有一個使用服務的WCF客戶端。讓我們打電話給服務合同:IService
您希望ServiceClient類在缺省情況下在添加服務引用時也實現IService以實現IInterface。
如果是這種情況,可以使用ServiceClient類標記爲partial的事實。
只需爲ServiceClient創建另一個部分聲明並添加您需要的接口(您必須確保自動生成的代碼和代碼的名稱空間相同)。它應該看起來像這樣:
namespace [ServiceClient Namespace]
{
public partial class ServiceClient : IInterface
{
}
}
希望它有幫助。
相關問題
- 1. Wcf依賴注入
- 2. WCF和依賴注入
- 3. WCF和Unity - 依賴注入
- 4. WCF Rest 4依賴注入
- 5. WCF依賴注入和抽象工廠
- 6. WCF服務中的依賴注入
- 7. WCF中的依賴注入ClaimsAuthenticationManager
- 8. SOA問題:WCF +依賴注入
- 9. 使用WCF代理的依賴注入
- 10. 依賴注入
- 11. 依賴注入
- 12. 依賴注入
- 13. 依賴注入
- 14. 依賴注入
- 15. 依賴注入
- 16. 使用依賴注入來注入依賴注入器
- 17. 依賴注入Android
- 18. MVP依賴注入
- 19. NServiceBus依賴注入
- 20. WPF依賴注入
- 21. 依賴注入2.17
- 22. 依賴注入`trait`
- 23. MVVM依賴注入
- 24. RESideMenu依賴注入
- 25. AngularJS - 依賴注入
- 26. ui.bootstrap依賴注入
- 27. 依賴注入@protocol?
- 28. Wicket依賴注入
- 29. #botframework依賴注入
- 30. Spring依賴注入
好的,但我如何做到在服務中注入一個類的自定義實現?示例:public interface ISendMail {seng(string subject,string message,string to); }。我想爲每個客戶端實現一個不同的類,並在客戶端中將此實現注入到WCF服務中。 Tks – 2010-06-11 18:04:53
該代碼可能不會表現出圈複雜性或任何其他流行詞,但我知道的是,以目前的形式,如果您有多個感興趣的服務,則需要大量的連接。 IMO需要一個更通用的方法來實現更大的項目。 – brumScouse 2013-05-27 13:20:59
你繼續使用這個詞。我不認爲這意味着你的想法。 – 2013-05-27 16:47:22