я получаю ошибку контейнера DI, если только я вручную зарегистрирую ее. Согласно документации, IkeyedServiceProvider
должен быть доступен автоматически при использовании сервисов Keyed, но это не так. var builder = WebApplication.CreateBuilder(args);
builder.Services.AddKeyedScoped("ProductService1");
builder.Services.AddKeyedScoped("ProductService2");
var app = builder.Build();
< /code>
в контроллере < /p>
[ApiController]
[Route("[controller]")]
public class CatalogController(CatalogDbContext context, IKeyedServiceProvider keyedServiceProvider) : ControllerBase
{
[HttpGet]
public async Task Get()
{
var service = keyedServiceProvider.GetRequiredKeyedService("ProductService1");
var products = await context.Products.ToListAsync();
return Ok(products);
}
}
< /code>
Сообщение об ошибке < /p>
system.invalidoperationException: невозможно разрешить службу для типа
'microsoft.extensions.dependencyInection.ikeyedServiceprovider 'while
active />'InjectKeyedServiceDbContext.Controllers.CatalogController'.
- Manual registration (works but should not be necessary):
builder.Services.AddSingleton(provider => (IKeyedServiceProvider) провайдер);
при регистрации ключевых служб, аналогично тому, как iServiceProvider доступен автоматически. /> Это ожидаемое поведение в .net 9? Должен ли IkeyedServiceProvider потребовать ручной регистрации?
Подробнее здесь: https://stackoverflow.com/questions/797 ... i-containe
Мобильная версия