Согласно Документация Microsoft :
Разрешить выделенную службу из одного экземпляра опасно.Это может привести к неправильному состоянию службы при обработке последующих запросов.
Теперь рассмотрим следующий код вашего ConfigureServices
метода в Startup
классе:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
В методе UseSqlServer
есть второй параметр для Срок службы , значение по умолчанию которого равно ServiceLifetime.Scoped
.Возможно, вы не указали второй параметр, поэтому он принимает значение по умолчанию ServiceLifetime.Scoped
.Это означает, что ваш DbContext
был зарегистрирован как Scoped service
.Теперь, если вы используете DbContext
в ProductRepository
, тогда вашему ProductRepository
нужно будет также противопоставить значение Scoped Service
, иначе провайдер ASP.NET Core DI не сможет его разрешить.
Сейчас Если вы действительно хотите зарегистрироватьсяВаш ProductRepository
как Singleton
Служба затем сделать DbContext
также Singleton
следующим образом:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),ServiceLifetime.Singleton);
Теперь это должно работать!
Примечание: я предположил, что ваш ProductRepository
зависит от DbContext
.Если нет, то ваш ProductRepository
репозиторий должен зависеть от сервиса, который зарегистрирован как сервис Scoped
, и поэтому в настоящее время вы не можете использовать ProductRepository
как Singleton
.