代码段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
答案 0 :(得分:3)
每个DI容器的工作方式略有不同,但INavigationService
是Prism.Forms中的唯一服务。 Prism对于解耦View和ViewModel非常重要。这就是说INAVigationService实际上需要知道View才能正常运行。因此,注入到ViewModel中的INavigationService
实例实际上是通过PrismApplication中名为ConfigureViewModelLocator
的工厂方法构造的,然后注入到ViewModel中。
由于这个原因,它是一个命名服务,在Unity的情况下,为什么它必须是构造函数中的第一个参数。请参阅ConfigureViewModelLocator
方法,以便更全面地了解此处发生的情况。