Невозможно передать Ioptions в метод статических расширений или разогрев синглтона - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь создать базу данных и коллекцию cosmos Db в файле startup.cs моего microService.Я попробовал 2 подхода.Один из них - создать статический метод расширения для сервиса и выполнить инициализацию для Cosmos db там.Другой подход состоит в том, чтобы просто создать синглтон (ICosmosDbInitializer) и выполнить инициализацию в конструкторе с помощью getAawaiter (). Getresult (), поскольку методы создания базы данных и коллекции являются асинхронными.

Я также создал Ioption длясохранить конфигурацию базы данных cosmos, такую ​​как databaseName, DbUrl, Accesskey и т. д.

 services.Configure<CosmosDbOptions>((cosmosDbOptions) =>
            {
// more code here
            });

Моя проблема заключается в том, что я не могу внедрить эту опцию в метод статического расширения или в singelton.

1,Использование метода статического расширения

Внутри Startup.cs

// Не уверен, как передать cosmosDbOptions здесь

 services.ConfigureCosmosDbClient(???);

Внутри статического расширениякласс

public static IServiceCollection ConfigureCosmosDbClient(this IServiceCollection services, CosmosDbOptions cosmosDbOptions)
        {
        }

2.Использование прогретого сингелтона. Необходимо создать прогрев синглтона, чтобы база данных и коллекция создавались до первого запроса пользователя.Здесь происходит сбой во время выполнения при попытке ввести Iptions.

Inside startup.cs

 services.AddSingleton<CosmosDbInitializer, CosmosDbInitializer>();

       public void Configure(IApplicationBuilder app)
            {
    app.ApplicationServices.GetService<CosmosDbInitializer>();
            }

Inside singleton

public CosmosDbInitializer(CosmosDbOptions cosmosDbOptions) :
        {
}

РЕДАКТИРОВАТЬ: добавлена ​​ошибка (из комментариев)

System.InvalidOperationException: «Не удается разрешить службу для типа« CosmosDbOptions »при попытке активировать« CosmosDbInitializer

* »1042 *

1 Ответ

2 голосов
/ 23 сентября 2019

Вы зарегистрировали свои параметры как TOptions, а не Service.В нем сообщается сообщение об ошибке вашего журнала.

Попробуйте изменить

public static IServiceCollection ConfigureCosmosDbClient(this IServiceCollection services, CosmosDbOptions cosmosDbOptions)
        {
        }

на

public static IServiceCollection ConfigureCosmosDbClient(this IServiceCollection services, IOptionsMonitor<CosmosDbOptions> cosmosDbOptions)

IOptionsMonitor используется для получения опций и управления уведомлениями опций для TOptionsэкземпляры.

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...