在我的解決方案中,我也使用Autofac和Prism。下面是一個簡化的項目,解釋了會發生什么。我正在注冊我的視圖、視圖模型和Autofac的容器類EventAggregator:public class BootStrapper { public IContainer BootStrap() { var builder = new ContainerBuilder(); builder.RegisterType<EventAggregator>() .As<IEventAggregator>().SingleInstance(); builder.RegisterType<MainWindow>().AsSelf(); builder.RegisterType<ChildView1>().AsSelf(); builder.RegisterType<MainViewModel>().AsSelf(); builder.RegisterType<Child1ViewModel>().AsSelf(); return builder.Build(); } }請注意,將視圖模型注冊為單例時,效果是相同的。我EventAggregator像這樣注入我的虛擬機:public class MainViewModel { private IEventAggregator _eventAggregator; public MainViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; UpdateName("Name1"); } public void UpdateName(string name) { ChildView1 win1 = new ChildView1(); //in the backend Child1ViewModel is assigend to its DataContext win1.Show(); _eventAggregator.GetEvent<UpdateNameEvent>().Publish(name); //this does not work } }上面的代碼不起作用。因為某些原因(希望大家告訴我原因),在執行UpdateName方法時,這個依賴不起作用,Child1ViewModel類內部的UpdateName方法沒有被執行:public class Child1ViewModel : ViewModelBase { private IEventAggregator _eventAggregator; public Child1ViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; _eventAggregator.GetEvent<UpdateNameEvent>().Subscribe(UpdateName); } private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged(); } }
為什么我的 Autofac 注冊的 Prism EventAggregator 沒有正確注入到視圖模
ibeautiful
2023-04-29 15:45:08