Windsor Fluent Registration-все виды в сборе


Я хотел использовать свободный интерфейс в замке Виндзор. Поскольку это недоступно в двоичных файлах "release" для .NET 2.0, я скомпилировал из транка, который, как сообщается, довольно стабилен. Я составил так:

  • замок.Ядро.dll
  • замок.DynamicProxy.dll
  • замок.микроядро.dll
  • замок.Виндзор.dll
Это должно быть все, что необходимо для того, что мне нужно, но все работает не так, как ожидалось. У меня есть коллекция сборок, которую я выполните итерацию и попробуйте загрузить все типы, содержащиеся в каждой сборке, используя следующий код:
var container= new WindsorContainer();
foreach (var assembly in _assemblies)
{
    container.Register(AllTypes.FromAssembly(assembly));
} 

Я прошел через код с отладчиком. _assemblies имеет в себе 2 сборки. Каждая сборка имеет множество типов, определенных в ней. Цикл повторяется дважды без ошибок, но по завершении container остается пустым.

Обновление: Небольшое уточнение. Последние двоичные файлы имеют свободный интерфейс, однако они ориентированы на платформу .NET 3.5. Я работаю с .NET 2.0. То последним двоичным релизом для поддержки .NET 2.0 был RC3.

1 2

1 ответ:

The Register(AllTypes... синтаксис-это только начало: вы должны сказать Виндзору, что именно вы хотите зарегистрировать.

Например, чтобы получить все контроллеры:

container.Register(AllTypes
         .FromAssemblyContaining(representativeControllerType)
         .BasedOn<Controller>()
         .Configure(reg => reg
             .LifeStyle.PerWebRequest));

Вот еще один пример, который регистрируется, следуя соглашению, что все классы, имя которых заканчивается на "Service", должны быть зарегистрированы:

container.Register(AllTypes
        .FromAssemblyContaining<ConfigurationService>()
        .Where(t => t.Name.EndsWith("Service", StringComparison.Ordinal))
        .WithService.FirstInterface()
        .Configure(reg => reg.LifeStyle.PerWebRequest));

Если вы действительно хотите зарегистрировать все типы, вы можете написать предложение Where, которое всегда возвращает true.

По умолчанию, Windsor не разрешает автоматически конкретные типы .

Для получения дополнительной информации о fluent registration APIпрочитайте документацию .