依赖注入wcf

Die*_*ias 6 .net c# wcf dependency-injection .net-3.5

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

Mar*_*ann 17

在Visual Studio中使用svcutil.exe或" 添加服务引用"向导时,自动生成的许多类型之一将是客户端界面.我们称之为IMyService.还会有另一个自动生成的接口,称为类似于IMyServiceChannel实现IMyService和IDisposable的接口.在客户端应用程序的其余部分中使用此抽象.

由于您希望能够创建新频道并再次关闭它,因此您可以引入抽象工厂:

public interface IMyServiceFactory
{
    IMyServiceChannel CreateChannel();
}
Run Code Online (Sandbox Code Playgroud)

在客户端应用程序的其余部分中,您可以依赖于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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以创建一个包含WCF ChannelFactory<T>作为实现的IMyServiceFactory的具体实现:

public MyServiceFactory : IMyServiceFactory
{
    public IMServiceChannel CreateChannel()
    {
        return new ChannelFactory<IMyServiceChannel>().CreateChannel();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

container.Register(Component
    .For<IMyServiceFactory>()
    .ImplementedBy<MyServiceFactory>());
Run Code Online (Sandbox Code Playgroud)

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

  • 你继续使用那个词.我认为这并不意味着你的意思. (2认同)