c# - 依赖注入(inject) wcf

标签 c# .net wcf .net-3.5 dependency-injection

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

最佳答案

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

既然你希望能够创建一个新的 channel 并再次关闭它,你可以引入一个抽象工厂:

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);
        }
    }
}

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

public MyServiceFactory : IMyServiceFactory
{
    public IMServiceChannel CreateChannel()
    {
        return new ChannelFactory<IMyServiceChannel>().CreateChannel();
    }
}

您现在可以通过将 IMyServiceFactory 映射到 MyServiceFactory 来配置您的 DI 容器。这是在 CaSTLe Windsor 中的做法:

container.Register(Component
    .For<IMyServiceFactory>()
    .ImplementedBy<MyServiceFactory>());

奖励信息:这里是 how to wire up a WCF service with a DI Container .

关于c# - 依赖注入(inject) wcf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3010820/

相关文章:

C#:测试 Entity Framework FromSql 以确保语法正确

c# - 降级到 .net 3.5 后找不到 Linq

.net - 哪种开源的面向文档的数据库系统最适合 Windows 使用?

wcf - 如何向 WCF SyndicationFeed 添加另一个命名空间?

C# 表达式使用 Guid 书签

c# - 为什么比较运算符不会自动重载 IComparable?

c# - 发送 POST HttpWebRequest 并且不需要接收响应

c# - 如何在 Linux 上将 DNX 'console app' 作为后台服务运行?

c# - VS2010 中跨多个 Web 服务的通用 DTO

asp.net - 具有Subsonic 3的OData(WCF数据服务)