Я использую единицу работы для своих переходов.Я создал DbContext, который обрабатывает соединения, фиксацию, откат.
В классах доступа к данным и бизнес-уровня я внедряю IDbContext с помощью конструкторов.
public TestDAL(IDbContext dbContext) : base(dbContext) {}
public TestService(IDbContext dbContext, ITestDAL testDAL) {}
Я переместил простой инжектор из autofac,Я получаю исключение в отношении несоответствия образа жизни.
- [Несоответствие образа жизни] TestService (Async Scoped) зависит от IDbContext, реализованного DbContext (Transient).
- [Несоответствие образа жизни]TestDAL (Async Scoped) зависит от IDbContext, реализованного с помощью DbContext (Transient).
Я регистрирую свои DAL и классы Service как область действия, а DbContext как переходную.
var ServiceRegistrations =
from type in Assembly.GetExecutingAssembly().GetTypes()
where type.Name.EndsWith("Service") && type.IsClass
from service in type.GetInterfaces()
select new { service, type };
foreach (var reg in ServiceRegistrations)
{
container.Register(reg.service, reg.type, Lifestyle.Scoped);
}
container.Register<IDbContext, DbContext>(Lifestyle.Transient);
Я читаю некоторыео DbContext должен быть временным, он не является потокобезопасным.Также я считаю, что классы DAL и Service не нужны для создания переходных процессов.Как я могу исправить эту ситуацию?Между прочим, это не было проблемой при автофаке.