Csharp/C#教程:dependency injectionwcf分享


dependency injectionwcf

我想在WCF中注入我的接口的实现,但我想在WCF的客户端初始化我的容器的dependency injection。 所以我可以为我的服务的每个客户端提供不同的实现。

在Visual Studio中使用svcutil.exe或“ 添加服务引用”向导时,自动生成的许多类型之一将是客户端界面。 我们称之为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包装为一个实现:

 public MyServiceFactory : IMyServiceFactory { public IMServiceChannel CreateChannel() { return new ChannelFactory().CreateChannel(); } } 

您现在可以通过将IMyServiceFactory映射到MyServiceFactory来配置DI容器。 以下是在温莎城堡中的表现:

 container.Register(Component .For() .ImplementedBy()); 

奖励信息:以下是如何使用DI容器连接WCF服务 。

以下是我从您的问题中理解的内容:

您有一个与WCF无关的接口。 我们称之为IInterface

您有一个使用服务的WCF客户端。 我们叫服务合同:IService

您希望ServiceClient类在添加服务引用时默认实现IService,以实现IInterface。

如果是这种情况,您可以使用ServiceClient类标记为partial的事实。

只需为ServiceClient创建另一个部分声明并添加所需的接口(您必须确保命名空间对于自动生成的代码和代码是相同的)。 看起来应该是这样的:

 namespace [ServiceClient Namespace] { public partial class ServiceClient : IInterface { } } 

希望它有所帮助。

上述就是C#学习教程:dependency injectionwcf分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1002528.html

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐