Я пытаюсь создать базу данных и коллекцию 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 *