【问题标题】:DelegateFactories don't return a new object(Unit of Work pattern)DelegateFactories 不返回新对象(工作单元模式)
【发布时间】: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


    【解决方案1】:

    您的 UnitOfWork 类已注册为“每个生命周期范围内的实例”。由于您没有创建单独的生命周期范围,因此每次创建 IUnitOfWork 时都会使用当前生命周期范围,并且 IUnitOfWork 只会创建一次。

    更改注册:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多