Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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