在我的 Shell 窗口中,我有一个工作区区域允许通过 RequestNavigate 进行视图切换。我将 Unity 与 View-First 方法一起使用,以便视图初始化如下所示:
public partial class WelcomeView : UserControl
{
public WelcomeView(WelcomeViewModel vm)
{
InitializeComponent();
this.DataContext = vm;
}
}
当应用程序加载时,我想导航到默认视图,因此我的 BootStrappers InitializeShell 如下所示:
protected override void InitializeShell()
{
Application.Current.MainWindow = (Window)Shell;
Application.Current.MainWindow.Show();
var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
regionManager.RequestNavigate("MainWorkspaceRegion", "WelcomeView");
}
现在,我的默认视图 WelcomeView 需要在构造函数中注入 WelcomeViewModel,而 WelcomeViewModel 需要在其构造函数中注入一些服务:
public class WelcomeViewModel : INotifyPropertyChanged
{
public WelcomeViewModel(ISomeService someService)
{
// Use some service
someService.SomeEventOccured += new Action(someService_SomeEventOccured);
}
...
}
问题是当 ISomeService 由模块提供时,由于在调用 InitializeShell 时模块未初始化,因此无法构造 WelcomeViewModel,进而也无法构造 WelcomeView。
这样做的正确方法是什么?