2012-03-28 43 views
1

我正在使用实体框架4.1编写ASP.Net MVC 3 Web应用程序。我的工作类的单位是一样的http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-applicationASP.Net MVC 3工作单元处理

然而,在这个优秀的教程中所描述的,而不是注入我的UOW类为我的控制器,我在服务类这样做,像这样

public class ListService : IListService 
{ 
    private IUnitOfWork _uow; 

    public ListService(IUnitOfWork uow) 
    { 
     _uow = uow; 
    } 

    public IList<List> GetAllListTypes() 
    { 
     return _uow.Lists.Get().OrderBy(l => l.description).ToList(); 
    } 
} 

我的单元工作类是这样的

public class UnitOfWork : IUnitOfWork, IDisposable 
{ 
    readonly LocumEntities _context = new LocumEntities(); 
    private GenericRepository<List> _lists = null; 

    public IGenericRepository<List> Lists 
    { 
     get 
     { 
      if (_lists == null) 
      { 
       _lists = new GenericRepository<List>(_context); 
      } 
      return _lists; 
     } 
    } 

    public void Commit() 
    { 
     _context.SaveChanges(); 
    } 

    private bool disposed = false; 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!this.disposed) 
     { 
      if (disposing) 
      { 
       _context.Dispose(); 
      } 
     } 
     this.disposed = true; 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

} 

而且这一切工作正常。但是,您会注意到我的UoW类中有方法来处理DbContext。我希望每个业务交易就像上面提到的教程完成后处置UOW类的,他们这样做是通过使用其控制下面的代码

protected override void Dispose(bool disposing) 
{ 
     db.Dispose(); 
     base.Dispose(disposing); 
} 

我试图修改此方法,并把它放在我的服务类但是它不工作,即在UOW类Dispose方法不会被调用

protected override void Dispose(bool disposing) 
{ 
     _uow.Dispose(); 
} 

我将不胜感激,如果有人可以在如何处置我的UOW类的正确方向指向我。

谢谢。

+0

你正在创建什么样的服务?它是ASP.NET Web API,WCF,Windows服务,业务逻辑服务还是什么?处理您的服务曾被称为?谁负责处理你的服务? – 2012-03-28 13:12:39

+0

@LadislavMrnka - Service类是我的业务逻辑的ASP.Net类设置,它位于我的服务层,它位于我的UI和我的Domain Model之间。我的服务类中没有处理方法。 – tgriffiths 2012-03-28 13:37:07

+0

@tgriffiths - 您使用什么IoC容器进行依赖注入?他们大多数都能够处理他们创建的组件。 – 2012-03-28 13:46:07

回答

0

乡亲

这个问题的答案是,因为我使用Unity为我的IoC,它可以设置为把我的工作类的单位处置的照顾。

+3

你能分享一下你是如何实现这个的 - 即你使用了一个内置的Unity LifeTimeManager吗?根据我的理解,默认的TransientLifetimeManager为每个调用创建一个实例,并且不处理调用Dispose()。基本上,你是怎么用Unity注册你的UOW的? – 2013-10-01 10:15:55