Использую в своем проекте в качестве 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.
Идеей выглядит в качестве еще одного пост-билд ивента писать в какой-нибудь файл название сборки, а потом читать список сборок из этого файла. Однако, у меня нет никаких идей, как это сделать.
Заранее спасибо за помощь!