Как правильно использовать Dependency Injection в Backend в Blazor Server? - PullRequest
1 голос
/ 24 марта 2020

У меня есть служба Blazor, для которой требуется указанная c служба LocalStorage. Это делается так:

 public class UserApi : IUserApi
    {
        private readonly LocalStorage _localStorage;

        public UserApi(LocalStorage localStorage)
        {
            _localStorage = localStorage;
        }
...
}

«LocalStorage» вводится в Startup.cs (ConfigureServices):

services.AddStorage();

(я думаю, можно с уверенностью предположить, что это работает как надо)

Я также добавил свой собственный сервис со следующей строкой:

services.AddSingleton<IUserApi, UserApi>();

На странице бритвы я ввожу свой сервис:

@inject IUserApi UserApi

и получить доступ к функции там:

  private void HandleValidSubmit()
    {
        if (UserApi.Login( _loginUser.Mail, _loginUser.Password, out string error, out Guid? guid))
        {
            // DoMagic
        }
    }

Когда я пытаюсь запустить свое приложение, я получаю следующую ошибку:

System.AggregateException

Внутреннее исключение 1:

InvalidOperationException: Ошибка при проверке дескриптора службы 'ServiceType: BlazorFood.IUserApi Время жизни: Singleton PracticeType: BlazorFood.UserApi': не удается использовать выделенную службу 'Cloudcrate.AspNetCore.Blazor.Browser.Storage.Ltonton' fromtontoStorage BlazorFood. i '

Когда я удаляю строку AddSingleton из ConfigureServices, я могу запустить свое приложение, но получить ошибку при попытке доступа к странице бритвы, содержащей IUserApi-Injection:

InvalidOperationException: Невозможно предоставить значение для свойства 'UserApi' для типа 'BlazorFood.Pages.admin.Login'. Не существует зарегистрированного сервиса типа «BlazorFood.IUserApi»

Что нужно сделать, чтобы правильно внедрить мои услуги?

1 Ответ

1 голос
/ 24 марта 2020

Эта часть сообщения об ошибке

Невозможно использовать сервис с областью действия «Cloudcrate.AspNetCore.Blazor.Browser.Storage.LocalStorage» из синглтона BlazorFood.IUserApi '

как также указано в документах

Опасно разрешать службу с определенными областями из единственного пакета. Это может привести к неправильному состоянию службы при обработке последующих запросов.

Ссылка Внедрение зависимостей в ASP. NET Ядро

Не сделайте ваш сервис одноразовым при регистрации, и это должно решить проблему

services.AddScoped<IUserApi, UserApi>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...