DelegateFactory不';t返回一个新对象(工作单元模式)
本文关键字:一个 新对象 对象 模式 单元 工作 DelegateFactory 返回 | 更新日期: 2023-09-27 18:26:36
我有一家工厂返回UOW
class UnitOfWorkFactory : IUnitOfWorkFactory
{
private UnitOfWork.Factory factory;
public ISession Session;
public IRepository Repository { get; set; }
public UnitOfWorkFactory(UnitOfWork.Factory factory,
ISession session, IRepository repository)
{
this.factory = factory;
this.Session = session;
Repository = repository;
}
public IUnitOfWork Create()
{
return factory(Session, Repository);
}
}
对工厂的第一个调用返回UOW的一个新实例。但是,在随后的调用中,它会返回以前创建的实例,而不是新的实例。我使用了开发人员的指令"autofac"来使用代理工厂
public class UnitOfWork : IUnitOfWork
{
public ISession Session;
public IRepository Repository { get; set; }
private Transaction transaction;
public UnitOfWork(ISession session, IRepository repository)
{
this.Session = session;
Repository = repository;
transaction = Session.Transaction;
}
public delegate IUnitOfWork Factory(ISession transaction,
IRepository repository);
public void Dispose()
{
if (transaction.IsActive)
{
//Rollback
}
Session.Dispose();
}
public void Commit()
{
transaction.Commit();
}
}
IoC 注册
builder.RegisterType<Repository>().As<IRepository>().InstancePerDependency();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope();
builder.RegisterType<UnitOfWorkFactory>().As<IUnitOfWorkFactory>().InstancePerLifetimeScope();
您的类UnitOfWork注册为"Instance per liferime scope"。由于您没有创建单独的生存期作用域,因此每次创建IUnitOfWork时都将使用当前生存期范围,并且IUnitOfWork将只创建一次。
更改注册:
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerDependency();