2016-11-28 95 views
0

有这样的代码:如何使用autofac并解析新的实例并忽略每个请求的注册单个或实例?

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

我怎么能解决的UnitOfWork的新实例?不是要求相同,真的是新的。

+0

你想拥有一个以上的单位的每个请求的工作?你可以发布你的UnitOfWork对象的代码吗?如果它引用一个ORM映射器(如EF db上下文),则会遇到问题。 – Derek

+0

改为使用'InstancePerDependency'。或者将第二个命名实例注册为“InstancePerDependency”,并在需要新实例的地方使用该实例。或者使用“新的UnitOfWork”。 –

+0

@Derek,是的,我想为新线程的dbcontext的新实例。 – dmitrievMV

回答

0

这可能看起来不是主题,但只要您的UnitOfWork为每个请求创建DbContext的新实例,注册AutoFac Dependency的方式就没有问题。你可以看到,我通过参数less构造函数处理上下文并为每个请求创建一个新的实例。

我用的是这样的: -

public class DbUnitOfWork : IUnitOfWork 
    { 
     private readonly MyDbContext _context; 

     public DbUnitOfWork() 
     { 
      _context = new MyDbContext(); 
     } 

     public void Dispose() 
     { 
      _context.Dispose(); 
     } 

     public void Commit() 
     { 
      try 
      { 
       _context.SaveChanges(); 
      } 
      catch (DbEntityValidationException exception) 
      { 
       throw exception; 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 

     public Task CommitAsync() 
     { 

      try 
      { 
       return _context.SaveChangesAsync(); 
      } 
      catch (DbEntityValidationException exception) 
      { 
       throw exception; 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 


     } 

     public Task CommitAsync(CancellationToken cancellationToken) 
     { 
      return _context.SaveChangesAsync(cancellationToken); 
     } 

     internal DbSet<T> Set<T>() where T : Entity 
     { 
      return _context.Set<T>(); 
     } 
    } 
+0

我使用工厂的dbcontext并创建它每个请求一次 这里代码简单[链接](https://github.com/dmitrievMV/OnionIdentity /blob/master/OnionIdentity.Data/Infrastructure/DbFactory.cs) – dmitrievMV

相关问题