我想在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