Для справки у меня есть служба, которую я хочу зарегистрировать в качестве единственного контейнера в контейнере единства. Я хочу, чтобы эта служба имела IEventAggerator, введенный в службу каким-то образом, либо путем вложения свойств, либо с помощью конструктора.Внедрение свойства в однопользовательскую службу в Prism (Unity, MVVM)
public class BeckhoffService: IProgrammableLogicController
{ ...}
и я либо хочу это:
[Dependency]
public IEventAggregator eventAggregator{get;set;}
или в конструкторе:
BeckhoffService(IEventAggregator eventAggregator)
Моя проблема возникает, когда я зарегистрировать эту услугу в единстве контейнера как синглтон.
В моем модуле Initialize, эти варианты я пробовал:
IProgrammableLogicController controllerSingleton = new BeckhoffService();
_container.RegisterInstance<IProgrammableLogicController>(controllerSingleton);
выше правильно регистрируется как синглтон, но в зависимости «controllerSingleton» не разрешаются.
_container.RegisterInstance<IProgrammableLogicController>(new BeckhoffService());
выше решает зависимости в «новой BeckhoffService()», но контейнер не возвращает одноэлементный экземпляр, когда она будет решена.
я был в состоянии осуществить это, передавая IEventAggregator в службу Beckhoff вручную без контейнера Unity нагнетания в службу непосредственно, но это, казалось, вроде некрасиво:
IProgrammableLogicController controllerSingleton = new BeckhoffService(_container.Resolve<IEventAggregator>());
_container.RegisterInstance<IProgrammableLogicController>(controllerSingleton);
Есть ли лучше или более предпочтительным способ выполнения того, что я хочу? Благодаря!