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