ASP.Net MVC 3 Утилизация отходов - PullRequest
1 голос
/ 28 марта 2012

Я пишу веб-приложение ASP.Net MVC 3 с использованием Entity Framework 4.1. Класс «Моя единица работы» аналогичен описанному в этом превосходном учебном пособии 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-application

Однако вместо того, чтобы вводить мой класс 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);
}

Я попытался изменить этот метод и поместить его в свой класс обслуживания, однако он не работает, т. Е. Метод dispose в классе UoW никогда не вызывается

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

Я был бы очень признателен, если бы кто-то мог указать мне правильное направление, как избавиться от моего класса UoW.

Спасибо.

1 Ответ

0 голосов
/ 05 апреля 2012

Люди

Ответ на этот вопрос заключается в том, что, поскольку я использую Unity для своего IoC, его можно настроить для утилизации моего класса Unit of Work.

...