Почему IkeyedServiceProvider требует ручной регистрации в контейнере .NET 9 DI?C#

Место общения программистов C#
Anonymous
Почему IkeyedServiceProvider требует ручной регистрации в контейнере .NET 9 DI?

Сообщение Anonymous »

Я работаю с Keyed Services в .net 9 и пытаюсь ввести IkeyedServiceProvider непосредственно в мои конструкторы, но
я получаю ошибку контейнера 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) провайдер);
на основе https://learn.microsoft.com/en-us/dotne ... ependence- Incement и факт, что ServiceProvider-IlakePerser, я буду ожидайте, что ServiceProvider-provider wealkeserv, я буду ожидайте, что ServiceProvider serviceProvider serveriedservider wealyserviser IkeyedServiceProvider будет автоматически доступен для
при регистрации ключевых служб, аналогично тому, как iServiceProvider доступен автоматически. /> Это ожидаемое поведение в .net 9? Должен ли IkeyedServiceProvider потребовать ручной регистрации?

Подробнее здесь: https://stackoverflow.com/questions/797 ... i-containe

Вернуться в «C#»