2012-03-28 3 views
1

Entity Framework 4.1을 사용하여 ASP.Net MVC 3 웹 응용 프로그램을 작성했습니다. 대신 내 컨트롤러에 내 UOW 클래스를 주입, 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 작업 단위 처리

그러나이 우수한 자습서에 설명 된대로 작업 클래스의 내 단위는, 내가 그렇게

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

내 장치처럼, 내 서비스 클래스에이를 동일 Work 클래스는 다음과 같습니다.

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

} 

그리고이 모든 것이 정상적으로 작동합니다. 그러나 DbContext를 처리 할 UOW 클래스의 메서드가 있음을 알 수 있습니다. 내가 위에서 언급 한 튜토리얼 완료 등의 모든 비즈니스 거래 후 UOW 클래스 처분하고자하는, 그들은 내가이 방법을 수정과에 배치하려고

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

자신의 컨트롤러에 다음 코드를 사용하여이 작업을 수행 할 내 그것이 작동하지 않습니다하지만 서비스 클래스, 즉는 UOW 클래스의 처분 방법은 누군가가 내 UOW 클래스를 처리하는 방법과 올바른 방향으로 날 지점 수 있다면 크게 감사하겠습니다

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

를 호출되지 없구요.

감사합니다. 내 IOC의에 대한 유니티를 사용하고 있습니다로 이에 대한 대답은,이다

+0

어떤 서비스를 만들고 있습니까? ASP.NET 웹 API, WCF, Windows 서비스, 비즈니스 로직 서비스 또는 무엇입니까? 귀하의 서비스 처분은 이제까지 불려 집니까? 누가 귀하의 서비스를 처분 할 책임이 있습니까? –

+0

@LadislavMrnka - Service 클래스는 비즈니스 로직을위한 ASP.Net 클래스 설정입니다. 서비스 레이어는 내 UI와 내 도메인 모델 사이에 있습니다. 내 서비스 클래스에는 dispose 메서드가 없습니다. – tgriffiths

+0

@tgriffiths - IOC 컨테이너는 종속성 주입에 어떤 용도로 사용됩니까? 대부분은 자신이 만든 구성 요소를 폐기 할 수 있습니다. –

답변

0

밥상

, 작업 클래스의 내 단위의 처분 돌봐 설정할 수 있습니다.

+3

달성 방법을 공유 할 수 있습니까? 예 : 내장 된 Unity LifeTimeManager를 사용 했습니까? 내 이해에서 기본 TransientLifetimeManager는 각 호출에 대한 인스턴스를 새로 작성하고 Dispose()를 호출하는 것을 처리하지 않습니다. 기본적으로 UOW를 Unity에 어떻게 등록 했습니까? –