Blazor: InvalidOperationException при попытке активировать пользовательский сервис - PullRequest
1 голос
/ 29 мая 2019

Я тестирую Blazor и сейчас пытаюсь получить контроль над сервисами и пользовательскими сервисами.

Проблема в том, что я получаю это сообщение об ошибке при запуске приложения Blazor:

WASM: System.InvalidOperationException: невозможно разрешить службу для введите "Blazor.Extensions.Storage.Interfaces.IStorage" при попытке активировать «BlazorTest.Services.MyLocalStorage».

  1. Мой собственный пользовательский сервис MyLocalStorage требуется другой сервис для доступа к локальному хранилищу браузеров; в этом случае я использую Blazor.Extensions.Storage
  2. Согласно этой странице на docs.microsoft.com , для настраиваемой службы, которая зависит от другой службы, необходим конструктор для ее поддержки: «Вместо этого необходимо использовать внедрение конструктора. Требуемые службы добавляются добавление параметров в конструктор сервиса. Когда внедрение зависимостей создает сервис, он распознает сервисы, которые ему требуются в конструкторе, и предоставляет их соответствующим образом. "

Итак, мой ConfigureServices в Startup.cs выглядит так:

public void ConfigureServices(IServiceCollection services)
{
    services.AddStorage(); // <-- extension method for Blazor.Extensions.Storage
    services.AddSingleton<IMyLocalStorage, MyLocalStorage>();
}

и мой таможенный сервис:

public interface IMyLocalStorage
{
    Task<string> GetAuthToken();
    Task<string> GetDeviceUUID();
    Task SetAuthToken(string authToken);
    Task SetDeviceUuid(string deviceUuid);
}

public class MyLocalStorage : IMyLocalStorage
{

    private readonly IStorage storage;

    public MyLocalStorage(IStorage storage)
    {
        this.storage = storage;
    }
    // bla bla implementation
}

Я думал, что это было единственное, что требовалось, но все равно не получается, как видно выше.

Обратите внимание, что если я пропущу свое собственное настраиваемое обслуживание и напрямую использую пакет Blazor.Extensions.Storage, он будет работать без проблем.

Я использую VS2019 Preview 16.2.0 и .NET Core 3.0.0.

1 Ответ

4 голосов
/ 29 мая 2019

Если вы посмотрите на код хранилища Blazor здесь , вы увидите, что он не регистрирует интерфейс IStorage.

Дальнейшая проверка классов SessionStorage и LocalStorage показывает, что оба они реализуют IStorage, поэтому даже если вы зарегистрировали IStorage, вам нужно будет уточнить, какой класс вы хотите добавить.

Похоже, вам нужно вместо этого вставить SessionStorage или LocalStorage в ваш конструктор.

public class MyLocalStorage : IMyLocalStorage
{
    private readonly LocalStorage storage;

    public MyLocalStorage(LocalStorage storage)
    {
        this.storage = storage;
    }
    // bla bla implementation
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...