Web 我可以在Blazor服务中调用NavigationManager吗

Web 我可以在Blazor服务中调用NavigationManager吗,web,razor,dependency-injection,webserver,blazor,Web,Razor,Dependency Injection,Webserver,Blazor,我正在尝试创建一个错误页面服务,当调用该服务时,它将确定发生了哪种类型的异常,并正确处理代码。如果异常类型为“redirect”,则应将用户发送到登录页面(出于测试目的,我只使用主页“/”页面) 我试图使用NavigationManager.NavigateTo(“/”),但每当我到达该函数调用时,就会遇到一个空点异常。我一直在寻找解决方案,但我看到的一切都是在.razor文件中使用NavigationManager,我正试图在.cs服务中完成这一点。这是目前不可能的还是我只是做错了什么?我已经

我正在尝试创建一个错误页面服务,当调用该服务时,它将确定发生了哪种类型的异常,并正确处理代码。如果异常类型为“redirect”,则应将用户发送到登录页面(出于测试目的,我只使用主页“/”页面)

我试图使用NavigationManager.NavigateTo(“/”),但每当我到达该函数调用时,就会遇到一个空点异常。我一直在寻找解决方案,但我看到的一切都是在.razor文件中使用NavigationManager,我正试图在.cs服务中完成这一点。这是目前不可能的还是我只是做错了什么?我已经在下面包含了我的文件“ErrorProcessingService.cs”中的所有相关代码,如有任何帮助,将不胜感激

using ToDoList.Pages;
using Microsoft.AspNetCore.Components;

namespace ToDoList.ExceptionHandler
{
    public class ErrorProcessingService
    {

        [Inject]
        protected NavigationManager NavigationManager {get; set;}

        public void processError(ErrorTypes.errorType et)
        {
            new ErrorTypes();
            switch(et)
            {
                case ErrorTypes.errorType.ignore:
                    //To Be Implemented
                    break;
                case ErrorTypes.errorType.popup:
                    //To Be Implemented
                    break;
                case ErrorTypes.errorType.redirect:
                    NavigationManager.NavigateTo("/");
                    break;
            }
        }
    }
}

在服务中,您不能使用
[Inject]
属性,而是在构造函数中注入依赖项:

使用ToDoList.Pages;
使用Microsoft.AspNetCore.Components;
命名空间ToDoList.ExceptionHandler
{
公共类错误处理服务
{
公共错误处理服务(NavigationManager NavigationManager)
{
NavigationManager=NavigationManager;
}
受保护的NavigationManager NavigationManager{get;}
public void processError(ErrorTypes.errortypeet)
{
新的错误类型();
开关(et)
{
案例errorType.errorType.ignore:
//实施
打破
案例errorType.errorType.popup:
//实施
打破
案例errorType.errorType.redirect:
NavigationManager.NavigateTo(“/”);
打破
}
}
}
}

非常感谢,这就成功了!我还需要将服务从singleton更改为scoped,在进行更改之后,它就可以工作了。您可以为创建此服务添加代码吗?构造此服务时,我不知道如何获取对NavigationManager的引用。@Adam它通过依赖项注入工作。您只需要在DI中添加服务:
services.AddTransient()
,例如。