单例WCF服务的组合根

时间:2012-10-06 22:35:00

标签: wcf dependency-injection inversion-of-control castle-windsor

我通常使用single instance context mode的WCF服务。服务合同和行为也在WCF服务库中。

如果服务作为Windows服务或Web服务托管,则它们会获得引用WCF服务库的项目。我喜欢保持此WCF服务库运行(仅用WCF测试客户端进行调试),但当我尝试通过行为类解析依赖项时,它需要too much effort

使用Castle Windsor,我还必须为Castle Windsor WCF Integration Facility进行额外配置。我只是想在服务启动时解决对象图,我觉得不应该这么难。

我想,因为行为实例只创建一次我应该能够将它用作组合根。我可以使用单个对象提供所有依赖项,并从容器中解析它,如下所示:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class SampleService : ISampleService, IDisposable
{
    private readonly IServiceManager _serviceManager;
    private readonly IWindsorContainer _container;

    public SampleService()
    {
        _container = new WindsorContainer();
        _container.Install(new ServiceInstaller());

        _serviceManager = _container.Resolve<IServiceManager>();
    }

    public string GetMessage()
    {
        return _serviceManager.GetMessage();
    }

    public void Dispose()
    {
        _container.Dispose();
    }
}

我知道明确要求容器解决依赖关系是一个坏主意,但这样可以避免这么多麻烦。我得保留默认的WCF配置,我可以运行WCF服务库进行调试,因为我现在有一个默认的构造函数。我也没有必要使用Castle Windsor WCF集成工具,这是我上次检查时遗漏的文档。

我猜Castle Windsor WCF集成工具提供了更多功能,但我只想解决依赖关系。这种方法可能会导致一些问题吗?我没有看到有人这样做,所以我想知道这是否合法使用。

0 个答案:

没有答案