У меня следующая ситуация (я работаю над приложением WPF, но не думаю, что это важно):
- Класс A;
- Класс B, что этовызывается из A;
Конструктор:
public A(IEventAggregator eventAggregator){
_eventAggregator = eventAggregator;
Button = new DelegateCommand(f);
_eventAggregator.GetEvent<MyEvent>().Subscribe(handleMyEvent);
}
И внизу:
private void f()
{
//here I create a new instance of B with Autofac
var bootstrap = new Bootstrapper();
var container = bootstrap.BootStrap();
BInstance= container.Resolve<B>(new NamedParameter("id", "myId"),
new NamedParameter("action", "my_action"));
BInstance.Show(); //here in real I create a view that has a DataContext = B instance
}
Кроме того, конструктор B выглядит следующим образом:
public B(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
// some other stuff
}
В какой-то момент в классе B я хочу вызвать событие «MyEvent», которое я подписал в конструкторе A.Итак, я делаю что-то вроде этого:
private void f()
{
_eventAggregator.GetEvent<MyEvent>().Publish();
}
Моя проблема состоит в том, что событие просто не запускается (функция handleMyEvent никогда не выполняет свою работу).
Важная вещь: еслиЯ заменяю эту строку в функции f (на A):
BInstance= container.Resolve<B>(new NamedParameter("id", "myId"),
new NamedParameter("action", "my_action"));
На:
BInstace = createB() // where createB is a Func<B>
, она работает без каких-либо проблем.Я действительно не понимаю, почему это происходит.Основная проблема заключается в том, что я должен передать некоторые параметры в B-ctor (это не совсем так, поскольку я передаю эти параметры другому классу, который создает экземпляр B, но это не имеет значения).
Примечание: я работаю с Autofac в качестве инжектора зависимостей и Prism для событий.