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();

DelegateFactory不';t返回一个新对象(工作单元模式)

您的类UnitOfWork注册为"Instance per liferime scope"。由于您没有创建单独的生存期作用域,因此每次创建IUnitOfWork时都将使用当前生存期范围,并且IUnitOfWork将只创建一次。

更改注册:

builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerDependency();