如何从外部 ViewModels 访问 Prism 的 DialogService

How to access Prism's DialogService from outside ViewModels

我想显示静态 class 中的一些对话框,但我不知道如何访问注入到视图模型中的 DialogService 对象。有什么办法可以得到吗?

对于 NavigationService,我在我的 App.xaml.cs 中公开了 属性,我可以从我的应用程序的任何地方获取它。我想对 DialogService 做同样的事情,但我不能这样做,因为我没有在 app.xaml.cs.

中看到该服务

在我的 App.xaml.cs 导航服务中,这是如何做到的:

public INavigationService oNavigationService => NavigationService;

I want to show some dialogs from a static class

你不想那样做。那 static 东西。您想要的是注册为单例的常规(非static)class。这样你就可以注入依赖关系,你的问题就变得微不足道了。

喜欢:

internal class ThisWasStaticBefore
{
    public ThisWasStaticBefore( INavigationService navigationService )
    {
        _navigationService = navigationService;
    }

    public void DoStuff()
    {
        _navigationService.Navigate();
    }

    private readonly INavigationService _navigationService;
}

在你的 Application-class:

 protected void RegisterTypes(IContainerRegistry containerRegistry)
 {
     containerRegistry.RegisterSingleton<ThisWasStaticBefore>();
 }

和其他地方

internal class SomeConsumer
{
    public SomeConsumer( ThisWasStaticBefore theService )
    {
        _theService = theService;
    }

    public void DoStuff()
    {
        _theService.DoStuff();
    }

    private readonly ThisWasStaticBefore _theService;
}
 

旁注:

如果你坚持,你可以用错误的方式来做,让你的class保持静态并通过ContainerLocator.Container.Resolve<INavigationService>()访问服务...