Prism.Unity.Forms 将 INavigationService 注入 ViewModel 构造函数

Prism.Unity.Forms injecting INavigationService to ViewModel constructor

代码片段 1:

    public MainPageViewModel(INavigationService navigationService)
    {
        this._navigationService = navigationService;
    }

代码片段 2:

    public MainPageViewModel(INavigationService navService)
    {
        this._navigationService = navService;
    }

谁能解释为什么 Code Snippet 1 有效但 Code Snippet 2 抛出异常 (System.NullReferenceException: Object reference not set to an instance of an object.)?

两者之间的唯一区别是构造函数中的参数名称。

P.S。我正在使用 Prism 6.2.0

每个 DI 容器的工作方式略有不同,但是 INavigationService 是 Prism.Forms 中的一项独特服务。 Prism 在解耦您的视图和视图模型方面非常重要。也就是说,实际上 INavigationService 需要了解 View 才能正常运行。因此,注入到 ViewModel 中的 INavigationService 实例实际上是通过 PrismApplication 中名为 ConfigureViewModelLocator 的工厂方法构造的,然后注入到 ViewModel 中。

正是由于这个原因,它是一个命名服务,并且在 Unity 的情况下,为什么它必须是构造函数中的第一个参数。请参阅 ConfigureViewModelLocator 方法以更全面地了解这里发生的事情。