Могу ли я позвонить NavigationManager в службу Blazor - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь создать страницу службы ошибок, которая при вызове определяет тип возникшего исключения и правильно обрабатывает код. Если исключение относится к типу «redirect», оно должно отправить пользователя на страницу входа (в целях тестирования я просто использую домашнюю страницу «/»).

Я пытаюсь использовать NavigationMangager.NavigateTo ("/"), но сталкиваюсь с исключением из нулевой точки всякий раз, когда достигаю этого вызова функции. Я некоторое время искал решение этой проблемы, но все, что я вижу, - это использование NavigationManager в файлах .razor, и я пытаюсь выполнить это в службе .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;
            }
        }
    }
}

1 Ответ

2 голосов
/ 07 апреля 2020

В сервисе нельзя использовать атрибут [Inject], но внедрить зависимость в конструкторе:

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

namespace ToDoList.ExceptionHandler
{
    public class ErrorProcessingService
    {
        puplic ErrorProcessingService(NavigationManager navigationManager)
        {
             NavigationManager = navigationManager;
        }

        protected NavigationManager NavigationManager { get; }

        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;
            }
        }
    }
}
...