如何从外部 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>()
访问服务...
我想显示静态 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>()
访问服务...