当禁用代码优化或full-pdb时,Castle Windsor WCF Facility在发布模式下不起作用

时间:2013-05-06 09:16:53

标签: castle-windsor build-process wcffacility

我开发了一个使用Castle Windsor WCF集成工具作为DDD架构的项目。有一个容器项目,单域项目,几个实现项目和一个可执行控制台。依赖树可以如下所示:

控制台(exe) - >容器(windsor) - > {实施 - > DomainInterfaces}

Console项目调用Container.Bootstrapper.Initialize()和城堡安装程序在此方法中搜索此程序集。在调试模式下,它成功运行,windsor加载所有依赖项并创建WCF服务。当光标进入Initialize时,我可以在模块窗口中看到新加载的模块。

依赖安装代码如下所示:

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container = new WindsorContainer().AddFacility<WcfFacility>()
    .Register
    (
        Component.For<IDataProvider>().Instance(new DataProvider(s_DataConfigurationElement)).LifeStyle.Singleton,
        Component.For<IUserRepository>().ImplementedBy<UserRepository>().LifeStyle.Singleton,
        Component.For<IDomainManager>().ImplementedBy<DomainManager>().LifeStyle.Singleton,
        Component.For<IGateway>().ImplementedBy<Gateway>().LifeStyle.PerThread.AsWcfService()
    );
}

问题出在发布模式。我无法为此方法设置断点,安装程序无法正常工作,因此模块窗口中未加载任何内容。在发布模式下,仅当取消选中代码优化并在Console项目的项目选项中选中full-pdb调试信息时,它才有效。这是一个已知问题还是错误?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您应该从不在安装程序类中重新分配container参数。这对我来说是个谜,为什么它在DEBUG模式下工作。

请改为尝试:

public void Install(IWindsorContainer container, IConfigurationStore store) {
    container.AddFacility<WcfFacility>();
    container.Register(
        Component.For<IDataProvider>().Instance(new DataProvider(s_DataConfigurationElement)),
        Component.For<IUserRepository>().ImplementedBy<UserRepository>(),
        Component.For<IDomainManager>().ImplementedBy<DomainManager>(),
        Component.For<IGateway>().ImplementedBy<Gateway>().AsWcfService());
}