如何在 DotVVM 项目中实现 MVVM Light INavigationService

How to implement MVVM Light INavigationService in a DotVVM project

我想实现 MVVM Light INavigationService interface in a DotVVM 项目;但我不知道该怎么做。我需要实现的最重要的方法是 NavigateTo(string pageKey) 方法。

我正在使用 SpaContentPlaceHolder in my MasterPage,我想通过调用 NavigateTo 方法来更改 SpaContentPlaceHolder 的内容(RouteName)。

如果你在视图模型中,你可以直接调用Context.RedirectToRoute("YourRoute", new { Param1 = something })

如果你想从不同的地方重定向,最简单的方法是创建 INavigationService 接口并实现它以调用 IDotvvmRequestContext 上的方法(已经在 ASP.NET 核心依赖注入容器):

public interface INavigationService 
{
    void NavigateTo(string routeName, object routeParameters);
}

public class DotvvmNavigationService 
{
    private IDotvvmRequestContext context;

    public DotvvmNavigationService(IDotvvmRequestContext context) {
        this.context = context;
    }

    public void NavigateTo(string routeName, object routeParameters) {
        this.context.RedirectToRoute(routeName, routeParameters);
    }
}

然后,您可以在 Startup.cs 中将实现注册为 scoped 依赖项,您应该可以在任何需要的地方获得它。

services.AddScoped<DotvvmNavigationService>();