C# 依赖注入wcf
我想在WCF中注入接口的实现,但我想在WCF的客户机中初始化依赖项注入的容器。所以我可以为我的服务的每个客户端使用不同的实现。当您在Visual Studio中使用svcuti.exe或添加服务引用向导时,自动生成的许多类型中的一种将是客户端接口。我们称之为C# 依赖注入wcf,c#,.net,wcf,.net-3.5,dependency-injection,C#,.net,Wcf,.net 3.5,Dependency Injection,我想在WCF中注入接口的实现,但我想在WCF的客户机中初始化依赖项注入的容器。所以我可以为我的服务的每个客户端使用不同的实现。当您在Visual Studio中使用svcuti.exe或添加服务引用向导时,自动生成的许多类型中的一种将是客户端接口。我们称之为IMyService。还有另一个自动生成的接口,名为IMyServiceChannel,实现IMyService和IDisposable。在客户端应用程序的其余部分中使用此抽象 由于您希望能够创建一个新频道并再次关闭它,因此可以引入一个抽象工
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<IMyServiceChannel>().CreateChannel();
}
}
公共MyServiceFactory:IMyServiceFactory
{
公共IMServiceChannel CreateChannel()
{
返回新的ChannelFactory().CreateChannel();
}
}
现在可以通过将IMyServiceFactory映射到MyServiceFactory来配置DI容器。以下是在温莎城堡的做法:
container.Register(Component
.For<IMyServiceFactory>()
.ImplementedBy<MyServiceFactory>());
container.Register(组件
.对于()
.ImplementedBy());
奖金信息:这是。这是我从你的问题中了解到的: 您有一个与WCF无关的接口。我们叫它界面吧 您有一个使用服务的WCF客户端。让我们称之为服务合同:IService 您希望ServiceClient类在添加服务引用以实现IInterface时默认实现iSeries 如果是这种情况,您可以使用ServiceClient类被标记为partial的事实 只需为ServiceClient做另一个部分声明并添加所需的接口(您必须确保自动生成的代码和您的代码的名称空间相等)。它应该看起来像:
namespace [ServiceClient Namespace]
{
public partial class ServiceClient : IInterface
{
}
}
希望对您有所帮助。好的,但是如何在服务中注入类的自定义实现呢?示例:公共接口ISendMail{seng(字符串主题、字符串消息、字符串收件人);}。我希望为每个客户机实现一个不同的类,并在客户机中将该实现注入到WCF服务中。TKST代码可能不会表现出圈复杂度或任何其他流行语,但我知道的是,以目前的形式来看,如果您有多个感兴趣的服务,这需要大量的连接。这需要一种更通用的方法,才能在更大的项目上有价值,我想。你一直在用这个词。我想它的意思和你想的不一样。什么词?我想我可能把这篇文章和你的链接搞混了…(关于圈复杂度)