【发布时间】:2013-08-06 22:10:43
【问题描述】:
我有一个返回 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”来使用delegate factory
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();
【问题讨论】:
标签: c# dependency-injection autofac unit-of-work factories