2013-05-06 2 views
0

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

Console (ех) -> Контейнер (Виндзорский) -> {Реализация -> DomainInterfaces}

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

Зависимость код установки приведен ниже:

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 проверяется в параметрах проекта проекта консоли. Это известная проблема или ошибка?

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

+0

Я могу изображения, что код для монтажников не оптимизирован далеко, так что код для загрузки модулей больше не поднимать их. Проверьте содержимое вашей DLL с помощью Ildasm. – Marwijn

+0

Можете ли вы сказать мне, какие DLL (я) следует проверить? Exe или контейнер или реализации? –

+0

попробуйте проверить DLL, которая содержит функцию установки выше. Альтернативу вы могли бы разместить там строку ведения журнала с помощью NLog. (Если код оптимизирован, что может даже устранить проблему). – Marwijn

ответ

2

Вы должны never переназначить параметр 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()); 
} 
+0

Вы правы, я не видел, но это не сработало. Если источником проблемы является ваша точка, она также не работает в режиме отладки. –

Смежные вопросы