我有一个带有 UnitOfWork 类的 Azure 工作者角色,看起来像这样:
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) { }
}
我认为这很简单。
现在,我想在 Unity 中配置我的代码优先 DbContext,以便每次解析 UnitOfWork 时都会创建一个新的 DbContext 并且所有随后解析的存储库也会得到它。
我认为 PerResolveLifetimeManager 可以解决问题:
container.RegisterType<IUnitOfWork, UnitOfWork>();
container.RegisterType<MyData, MyData>(new PerResolveLifetimeManager());
但事实并非如此。我得到了所有这些奇怪的与 SQL 相关的错误,例如:
“不允许新事务,因为会话中还有其他线程在运行。”
是什么赋予了?