2015-09-23 1 views
3

У меня есть отдельный проект, который я использую для обработки всех моих установщиков и инсталляторов Castle Windsor.Регистрация Castle Windsor с использованием функции FromAssembly требует наличия сторонних ссылочных библиотек, но не всех

В одном инсталляторе я пытаюсь зарегистрировать репозитории Конвенций с помощью:

Classes.FromAssemblyContaining(typeof(BaseRepository)).BasedOn(typeof(IRepository)) 
.WithServiceSelf() 

Когда я использую любую форму FromAssembly в любом монтажнике в проекте я получаю исключение, когда программа установки выполняется, что он не может найдите определенную стороннюю DLL.

Однако если зарегистрировать компоненты по отдельности:

Component.For<IVendorRepository>().ImplementedBy<VendorRepository>() 
Component.For<IContactRepository>().ImplementedBy<ContactRepository>() 

Я не получаю ошибку и сконфигурированной контейнер возвращается, как и ожидалось.

Особенно неприятно то, что не все мои DLL-файлы третьей стороны требуются в папке bin при использовании FromAssembly, только для избранных.

Что происходит при использовании функции FromAssembly, которая вызывает определенные DLL-запросы, а остальные - как необязательные?

Есть ли способ зарегистрироваться по конвенции без использования функции FromAssembly?

ответ

0

Здесь недостаточно информации, чтобы определенно заявить, ПОЧЕМУ требуются некоторые сторонние сборки, а другие нет. Мое лучшее предположение заключается в том, что некоторые из сторонних библиотек в настоящее время загружаются, когда вы начинаете регистрировать компоненты по соглашению, тогда как другие - нет.

Однако, чтобы ответить на ваш вопрос, да, вы можете зарегистрироваться по соглашению, избегая определенных сборок. Один из вариантов (Castle Windsor 3.x) заключается в регистрации только компонентов в корневом пространстве имен приложения, что предотвращает регистрацию сторонних DLL.

Classes 
    .FromAssemblyContaining(typeof(BaseRepository)) 
    .BasedOn(typeof(IRepository)) 
    .WithServiceSelf() 
    .Where(Component.IsInNamespace("Your.Application.Namespace")) 

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

  • Нет связанных вопросов^_^