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

时间:2017-03-10 12:38:34

标签: xamarin.forms unity-container prism

代码段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

1 个答案:

答案 0 :(得分:3)

每个DI容器的工作方式略有不同,但INavigationService是Prism.Forms中的唯一服务。 Prism对于解耦View和ViewModel非常重要。这就是说INAVigationService实际上需要知道View才能正常运行。因此,注入到ViewModel中的INavigationService实例实际上是通过PrismApplication中名为ConfigureViewModelLocator的工厂方法构造的,然后注入到ViewModel中。

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