OK Я думаю, что может быть слишком много информация о Castle Windsor, потому что поиск этих ключевых слов дает мне примеры всего, и, честно говоря, я недостаточно понимаю, как это работает правильно устраните это. На данный момент я попробовал немало перестановок.Замок Windsor IoC Property Injection прост в использовании
У меня есть IUnitOfWorkFactory
, который я хочу создать как одноэлементный. Таким образом, установить замок Виндзор, написать немного кода, как так:
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; }
...
... насколько я могу понять, это надо просто «работа» (хотя не спрашивайте меня как). Но мое свойство всегда имеет значение null, когда я пытаюсь его использовать.
Кажется, что мне не хватает чего-то глупого и простого, но я понятия не имею, что это такое.
Я также попытался
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
Вы зарегистрированы как ваш контроллер? –
... Не было бы это необходимо только для инъекции зависимостей конструктора? Возможно, я неправильно понимаю, как это должно работать. –
Нет, контейнер должен создать корень графа объекта. В этом случае контроллер. Это относится к инъекции свойств или конструктора (потому что они работают одинаково). –