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 ответ:
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прочитайте документацию .