Castle Windsor WCF Facility не работает в режиме выпуска, когда оптимизация кода или полная pdb отключены

Я разрабатываю проект, в котором в качестве архитектуры DDD используется Castle Windsor WCF Integration Facility. Есть проект одного контейнера, проект одного домена, несколько проектов внедрения и исполняемая консоль. Дерево зависимостей может быть показано ниже:

Консоль (exe) -> Контейнер (windsor) -> {Реализации -> DomainInterfaces}

Консольный проект вызывает Container.Bootstrapper.Initialize (), и установщики замка ищут эту сборку в этом методе. В режиме отладки работает успешно, виндзор загружает все зависимости и создает службу WCF. Когда курсор входит в «Инициализировать», я вижу недавно загруженные модули в окне «Модули».

Код установки зависимости показан ниже:

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

Проблема в режиме выпуска. Я не мог установить точку останова для этого метода, и установщики не могли работать, поэтому в окне модулей ничего не загружалось. В режиме выпуска он работает только в том случае, если оптимизация кода не отмечена, а информация об отладке full-pdb проверена в параметрах проекта консольного проекта. Это известная проблема или ошибка?

Заранее спасибо.


person Onur Gazioğlu    schedule 06.05.2013    source источник
comment
Я могу представить, что код для установщиков оптимизирован, так что код для загрузки модулей больше не берет их. Проверьте содержимое вашей dll с помощью Ildasm.   -  person Marwijn    schedule 06.05.2013
comment
Можете ли вы сказать мне, какие dll я должен проверить? Exe, контейнер или реализации?   -  person Onur Gazioğlu    schedule 06.05.2013
comment
попробуйте проверить dll, которая содержит указанную выше функцию установки. В качестве альтернативы вы можете поместить туда строку регистрации с помощью NLog. (Если код оптимизировать, проблема может даже исчезнуть).   -  person Marwijn    schedule 09.05.2013


Ответы (1)


Вы не должны никогда переназначать параметр 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());
}
person Aleš Roubíček    schedule 07.05.2013
comment
Вы правы, я не видел, но не вышло. Если источником проблемы является ваша точка зрения, он не работает также в режиме отладки. - person Onur Gazioğlu; 07.05.2013