Замок Виндзор и регистрация типов из сборок памяти; Является ли это возможным?

У нас есть приложение, которое при запуске компилирует несколько классов кода в несколько сборок в памяти. Я пытаюсь зарегистрировать эти типы в Castle Windsor, но не могу их создать; он говорит, что типы типов не могут быть найдены.

Кто-нибудь знает возможно ли это? Я использую файл конфигурации XML и скомпилировал DLL перед созданием экземпляра контейнера Windsor. Ниже приведен пример конфигурации, которую я использую; Я не указываю имя DLL в объявлении типа здесь, поскольку на диске нет физической DLL.

   <!-- Register the Filtering provider, which is specified in the custom script -->
    <component id="FilteringProvider" 
               type="Optimus.Scripts.Filtering.FilteringProvider"
               service="Optimus.Filtering.Lib.IFilteringProvider, Optimus.Filtering.Lib"
               >
    </component>

С уважением, Ноэль


person Bigtoe    schedule 19.04.2011    source источник
comment
Вы пробовали регистрировать свои компоненты по коду?   -  person mathieu    schedule 19.04.2011
comment
Я не пробовал через код; поскольку требуется внешняя регистрация. Я все равно попробую и посмотрю, смогу ли я добиться этого таким образом; но очень ищу внешнюю регистрацию.   -  person Bigtoe    schedule 19.04.2011
comment
не по теме, но мне очень любопытно, зачем вам нужна регистрация в конфиге?   -  person Krzysztof Kozmic    schedule 20.04.2011
comment
У нас есть требование, чтобы у нас были части нашего приложения, поддерживающие скрипты. Мы позволяем это путем предварительной компиляции настраиваемых файлов C #, которые предоставляют фиксированный интерфейс службы, который мы предоставляем. Мы не занимаемся именами компонентов или пространств имен; поскольку они будут зависеть от клиента; но нам нужен был способ позволить клиенту настроить сценарии в соответствии с тем, что они разработали. В то время конфигурация XML казалась самой простой. Если есть другие подходы, я был бы рад их рассмотреть.   -  person Bigtoe    schedule 20.04.2011


Ответы (1)


Вы можете зарегистрировать компоненты из кода в конкретной сборке:

container.Register(
    AllTypes.Of<IService>()
    .FromAssembly(myAssemly));

Здесь вы передадите свою динамически скомпилированную сборку.

http://docs.castleproject.org/Windsor.Registering-components-by-conventions.ashx

person mathieu    schedule 19.04.2011
comment
Спасибо, Матье. Похоже, это сработает для нас; если предположить, что в скомпилированной DLL будет только 1 экземпляр службы определенного типа. Нам также нужно будет обновить Castle до последней версии. - person Bigtoe; 19.04.2011