У меня есть рабочая роль Azure с классом UnitOfWork, который выглядит примерно так:
public class UnitOfWork : IUnitOfWork
{
public MyData Db { get; private set; }
public ILoginRepository LoginRepository { get; private set; }
public ISubscriptionRepository SubscriptionRepository { get; private set; }
public UnitOfWork(MyData db,
ILoginRepository loginRepository,
ISubscriptionRepository subscriptionRepository)
{
}
}
Репозитории также принимают ссылку на DbContext:
public class LoginRepository : Repository<Login>, ILoginRepository
{
public LoginRepository(MyData db) : base(db) { }
}
Я бы подумал, что это довольно прямолинейно.
Теперь я хотел бы настроить DbContext для кода в Unity таким образом, чтобы каждый раз при разрешении UnitOfWork создавался новый DbContext, и все впоследствии разрешенные репозитории также получали его.
Я думаю, что PerResolveLifetimeManager справится с задачей:
container.RegisterType<IUnitOfWork, UnitOfWork>();
container.RegisterType<MyData, MyData>(new PerResolveLifetimeManager());
Но это не так. Я получаю все эти странные ошибки, связанные с SQL, например:
«Новая транзакция не разрешена, поскольку в сеансе выполняются другие потоки».
Что дает?