使用 IOC 解析视图和视图模型
本文关键字:视图 模型 IOC 使用 | 更新日期: 2023-09-27 18:33:36
>我有一个实现以下接口的用户控件:
public interface IView
{
object DataContext { get; set; }
}
..它是实现以下接口的相应视图模型:
public interface ICertificationViewModel
{
string NumOfCertification { get; set; }
}
我有另一个称为导航服务的服务,实现以下接口:
public interface INavigationService<TView,TViewModel>
{
void ShowView<TView,TViewModel,T>(T model) where T:class;
}
我正在使用 unity,每当调用导航服务上的 ShowView 方法时,我都需要将一个新的(瞬态(视图和视图模型放在一起。我无法将视图和视图模型作为构造函数依赖项注入(因为应该创建新实例(,并且我不想采用服务定位器路由(即在 ShowView 中调用 Unity 来解析视图和视图模型(。有没有办法使用 Unity 或其他任何东西来解决这个问题?我到处寻找,找不到确切的答案。我正在使用Prism和.NET 3.5。我还想保持一点通用,以便可以使用导航服务 ShowView 方法解析任何视图和视图模型。
你能帮忙解决吗?
Prism 库提供了一个区域导航服务,用于控制视图之间的导航。RegionNavigationService 实现了 IRegionNavigationService,并定义了 RequestNavigate(( 方法。您可以解析在指定区域中注册的任何视图的导航(在不同区域中浏览视图没有意义(。
/// <summary>
/// Provides navigation for regions.
/// </summary>
public interface IRegionNavigationService : INavigateAsync
{
...
}
INavigateAsync:
/// <summary>
/// Provides methods to perform navigation.
/// </summary>
/// <remarks>
/// Convenience overloads for the methods in this interface can be found as extension methods on the
/// <see cref="NavigationAsyncExtensions"/> class.
/// </remarks>
public interface INavigateAsync
{
/// <summary>
/// Initiates navigation to the target specified by the <see cref="Uri"/>.
/// </summary>
/// <param name="target">The navigation target</param>
/// <param name="navigationCallback">The callback executed when the navigation request is completed.</param>
/// <remarks>
/// Convenience overloads for this method can be found as extension methods on the
/// <see cref="NavigationAsyncExtensions"/> class.
/// </remarks>
void RequestNavigate(Uri target, Action<NavigationResult> navigationCallback);
}
如果您在 ShowView(( 方法中完成了一些自定义的前后导航工作,则可以在所涉及的视图或视图模型上实现定义 OnNavigatedTo(( 和 OnNavigatedFrom(( 的 INavigationAware。
若要了解这些方法的工作原理,以下快速入门使用 OnNavigatedTo(( 方法在新的导航视图上读取和设置任何上下文参数:
- 视图切换导航快速入门
InavigationAware 文档:
- 参与导航的视图和视图模型
如果这没有帮助,了解 ShowView(( 方法的预期行为会很有用会的。
问候。