1

我通常使用使用单实例上下文模式的 WCF 服务。服务契约和行为也在 WCF 服务库中。

如果该服务作为 Windows 服务或 Web 服务托管,它们将获得自己的引用 WCF 服务库的项目。我喜欢保持这个 WCF 服务库运行(用于简单地使用 WCF 测试客户端进行调试),但是当我尝试通过行为类解决依赖关系时,它需要太多的努力。

使用 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 集成设施提供了更多功能,但我只想解决依赖关系。这种方法是否可能会导致一些问题?我还没有看到有人这样做,所以我想知道这是否合法使用。

4

0 回答 0