@Quilin
Full-stack разработчик

Регистрация зависимостей из других сборок в CastleWindsor?

Использую в своем проекте в качестве IoC-container'а CastleWindsor последней версии. Проект под MVC4, используется SOA. В проекте уже на этапе альфа-тестирования много функционала и кода, для дальнейшей расширяемости многие участки кода разнесены не просто по разным проектам - но даже по разным солюшнам.

Таким образом, при регистрации зависимостей UIных солюшнов приходится подтягивать эти зависимости из сторонних сборок. Есть ли какие-то решения, которые оказались бы лучше моего?

Мое решение
В CoreFramework приложения есть статический класс
public static class AssemblyNamesRepository
    {
        private static readonly string[] assemblyNames = new[]
                                                             {
                                                                 "Core", "BusinessObjects", "UserServices",
                                                                 "ModuleServices", "CharacterServices",
                                                                 "RoomServices", "ReaderServices", "CommentServices",
                                                                 "PostServices", "AttributesServices", "BaseSite"
                                                             };

        public static IEnumerable<string> SelectAll()
        {
            return assemblyNames;
        }
    }


Соответственно, при установке контейнера делаю я что-то подобное:
foreach (var assemblyName in AssemblyNamesRepository.SelectAll())
                container.Register(
                    Types.FromAssemblyNamed(assemblyName)
                        .Where(t => t.IsClass)
                        .Configure(t => t.LifestylePerWebRequest())
                        .WithService.AllInterfaces());


Понятное дело, что сталкиваться мне приходится с такой проблемой: как только я добавляю новый сервис, мне обязательно нужно продублировать его в классе AssemblyNamesRepository.
Идеей выглядит в качестве еще одного пост-билд ивента писать в какой-нибудь файл название сборки, а потом читать список сборок из этого файла. Однако, у меня нет никаких идей, как это сделать.

Заранее спасибо за помощь!
  • Вопрос задан
  • 2521 просмотр
Решения вопроса 1
@Quilin Автор вопроса
Full-stack разработчик
Решил проблему через xml-файл с настройками топологии. Так или иначе, пришлось привязать каждый сервис к своему порту, ну и еще несколько мелочей описать для каждого сервиса. Заодно решил хранить в этом файле название сборки. Теперь на старте приложения просто читаю из файла эти AssemblyNames, а дальше все делаю так же.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы