我正在使用 Prism 7 创建 WPF 应用程序。在其中一个视图模型中,我试图注入一个名为 IActivityService 的接口。IActivityService 有多个具体类,但出于问题的目的,TestActivtyService 和ExerciseActivityService。以下是我让他们注册的方式:
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.Register<IActivityService, TestActivtyService>(InstanceNames.TestActivtyService);
containerRegistry.Register<IActivityService, ExerciseActivityService>(InstanceNames.ExerciseActivityService);
containerRegistry.RegisterForNavigation<Shell, ShellViewModel>(ViewNames.Shell);
containerRegistry.RegisterForNavigation<Home, HomeViewModel>(ViewNames.Home);
containerRegistry.RegisterForNavigation<ActivityManagement, ActivityManagementViewModel>(ViewNames.TestManagement);
}
ActivityManagementViewModel 有一个使用 IActivityService 的构造函数。
private readonly IActivityService _activityService;
public ActivityManagementViewModel(IRegionManager regionManager, IActivityService activityService)
: base(regionManager)
{
this._activityService = activityService;
}
我无法导航到使用 ActivityManagementViewModel 的 ActivityManagement 视图。
private void NavigateToTesting()
{
//Navigate to ActivityManagement with TestActivtyService injected as IActivityService
RegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.ActivityManagement.GetUri());
}
private void NavigateToExercise()
{
//Navigate to ActivityManagement with ExerciseActivityService injected as IActivityService
RegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.ActivityManagement.GetUri());
}
问题
- 当我导航到 ActivityManagement 视图时,它总是使用最后一个注册的具体类作为 IActivityService 注入 ActivityManagementViewModel。为什么会这样?
- 如何在运行时使用选择的具体类导航到视图?
我之所以要这样做是因为视图 UI 和要求对于界面的每个具体实现都是完全相同的。不同之处在于具体类使用的数据和数据存储库。对我来说,为每个具体实现重新创建相同的视图和视图模型以以相同的方式显示数据是没有意义的。当引入新的具体实现时,总是必须添加它们也不是一件好事。
如果我遗漏了什么或者有更好的方法来实现这一点,请教育我。