Я использую Autofac
для введения зависимостей в. Net Core 3. Потому что я хочу использовать AOP с Autofa c. В моем проекте есть класс Context
как DbContext
. Я зарегистрировал класс Context с опциями Autofa c Container. Вот как это выглядит ниже:
var dbContextOptions = new DbContextOptionsBuilder<Context>().UseMySql(str, x => x.MigrationsAssembly("Data"));
builder.RegisterType<Context>().WithParameter("options", dbContextOptions.Options).InstancePerLifeTimeScope();
После того, как я написал этот код, я запустил проект. Я проверил уникальную базу данных индекса с почтальоном. Мой сценарий тестирования выглядит следующим образом:
- Я заполнил поля.
- Я отправил его.
- Успешно записан.
- Я повторно опубликовал it.
- Я получил исключение повторяющихся записей для уникальных индексов.
- Я отредактировал уникальные поля.
- Я опубликовал его заново.
- Я получил исключение для повторяющихся записей для уникальных индексов. Когда я посмотрел детали исключения, я увидел предыдущие заполненные поля.
При отладке проекта я увидел, что single dbcontext был создан для каждого запроса. Я думал, что проблема была вызвана этим. И я изменил код регистра, выглядит, как показано ниже,
builder.RegisterType<Context>().WithParameter("options", dbContextOptions.Options).InstancePerRequest();
Я получил исключение, выглядит так, как показано ниже,
Autofa c .Core.DependencyResolutionException: исключение было выдается при активации Logi c .Concrete.BusinessManager -> Data.EntityFramework.UnitOfWork. ---> Autofa c .Core.DependencyResolutionException: Невозможно разрешить тип 'Data.EntityFramework.Context', поскольку невозможно определить область действия, к которой он принадлежит. Следующие службы предоставляются этой регистрацией: - Data.EntityFramework.Context
Подробности ---> Autofa c .Core.DependencyResolutionException: Нет области с тегом, совпадающим с 'AutofacWebRequest' из области видимости для которого был запрошен экземпляр.
Когда я использую встроенное внедрение зависимостей Microsoft, проблем нет, и он генерирует новый dbcontext для запроса.
Как я могу зарегистрировать для запроса dbcontext с помощью autofa c?