Хорошо, я думаю, что информации о замке Виндзор может быть слишком много, потому что поиск этих ключевых слов дает мне примеры всего, и, честно говоря, я недостаточно понимаю, как это работает, чтобы правильно устранять неполадки. Я пробовал довольно много перестановок с небольшой удачей на этом этапе.
У меня есть IUnitOfWorkFactory
, который я хочу создать как синглтон. Итак, я устанавливаю Castle Windsor, пишу такой код:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.LifestyleSingleton()
.Instance(new NHUnitOfWorkFactory())
);
propInjector.Resolve<IUnitOfWorkFactory>();
Это вызывается из моего метода Application_Start
.
У меня AccountController
подключен так:
public class AccountController : SecureController
{
public IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
...
... насколько я понимаю, это должно просто "работать" (хотя не спрашивайте меня, как). Но мое свойство всегда равно нулю, когда я пытаюсь его использовать.
Кажется, я упускаю что-то глупое и простое, но я понятия не имею, что это такое.
я тоже пробовал
var propInjector = iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
без успеха.
Что я делаю не так?
ЗАКЛЮЧЕНИЕ
Я пропустил несколько шагов здесь. Я создал установщик и загрузчик в соответствии с tutorial, но я зарегистрировал свои сервисы не в том месте... перед созданием фабрики контроллеров. Теперь мой загрузчик выглядит так:
iocContainer = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
iocContainer.Register(
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHUnitOfWorkFactory>()
.LifestyleSingleton()
);
... и мои инъекции свойств больше не были нулевыми... теперь мне просто нужно отладить другие 87 проблем...