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의에 대한 유니티를 사용하고 있습니다로 이에 대한 대답은,이다
어떤 서비스를 만들고 있습니까? ASP.NET 웹 API, WCF, Windows 서비스, 비즈니스 로직 서비스 또는 무엇입니까? 귀하의 서비스 처분은 이제까지 불려 집니까? 누가 귀하의 서비스를 처분 할 책임이 있습니까? –
@LadislavMrnka - Service 클래스는 비즈니스 로직을위한 ASP.Net 클래스 설정입니다. 서비스 레이어는 내 UI와 내 도메인 모델 사이에 있습니다. 내 서비스 클래스에는 dispose 메서드가 없습니다. – tgriffiths
@tgriffiths - IOC 컨테이너는 종속성 주입에 어떤 용도로 사용됩니까? 대부분은 자신이 만든 구성 요소를 폐기 할 수 있습니다. –