C# 依赖注入wcf

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。在客户端应用程序的其余部分中使用此抽象 由于您希望能够创建一个新频道并再次关闭它,因此可以引入一个抽象工

我想在WCF中注入接口的实现,但我想在WCF的客户机中初始化依赖项注入的容器。所以我可以为我的服务的每个客户端使用不同的实现。

当您在Visual Studio中使用svcuti.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<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代码可能不会表现出圈复杂度或任何其他流行语,但我知道的是,以目前的形式来看,如果您有多个感兴趣的服务,这需要大量的连接。这需要一种更通用的方法,才能在更大的项目上有价值,我想。你一直在用这个词。我想它的意思和你想的不一样。什么词?我想我可能把这篇文章和你的链接搞混了…(关于圈复杂度)