Я пытаюсь зарегистрировать несколько реализаций DbContext как pnet основной DI
, поэтому я зарегистрировал DbContext ниже
services.AddScoped(c => new CoreDbContext(c.GetService<DbContextOptions<CoreDbContext>>()));
services.AddScoped(c => new TnADbContext(c.GetService<DbContextOptions<TnADbContext>>()));
services.AddScoped<Func<DbContextType, IDbContext>>(provider => key =>
{
switch (key)
{
case DbContextType.Core:
return provider.GetService<CoreDbContext>();
case DbContextType.TnA:
return provider.GetService<TnADbContext>();
case DbContextType.Payroll:
throw new ArgumentOutOfRangeException(nameof(key), key, null);
default:
throw new ArgumentOutOfRangeException(nameof(key), key, null);
}
});
, поэтому из репозиториев я пытаюсь запросить экземпляр, подобный приведенному ниже : Web.Areas.TestController Время жизни: переходный тип реализации: Web.Areas.TestController ': невозможно разрешить службу для типа «Data.IDbContext» при попытке активировать «Service.InterfaceService».)
По существу почти все сервисы и контролеры жалуются на одну и ту же проблему. Так что же было недостающей частью?
ОБНОВЛЕНИЕ
На самом деле я внес некоторые изменения при регистрации контекста БД, теперь он работает
services.AddScoped<Func<DbContextType, IDbContext>>(provider => key =>
{
switch (key)
{
case DbContextType.Core:
return new CoreDbContext(provider.GetService<DbContextOptions<CoreDbContext>>());
case DbContextType.TnA:
return new TnADbContext(provider.GetService<DbContextOptions<TnADbContext>>());
case DbContextType.Payroll:
throw new ArgumentOutOfRangeException(nameof(key), key, null);
default:
throw new ArgumentOutOfRangeException(nameof(key), key, null);
}
});