Справка по Виндзору и шаблонам репозитория и единиц работы

У меня есть эти интерфейсы:

public interface IUnitOfWork
{
    IPersonRepository People { get; }
    IBookRepository Books { get; }
    int Commit();
}

public interface IBookRepository
{
    Book GetBookById(int id);
    IQueryable<Book> GetAllBooks();
}

public interface IPersonRepository
{
    Person GetPersonById(int id);
    IQueryable<Person> GetAllPeople();
}

Я реализую IUnitOfWork следующим образом:

public class SqlUnitOfWork : IUnitOfWork
{
    private readonly DbContext dbContext;

    public SqlUnitOfWork()
    {
        dbContext = new DbContext("name=SQLContainer");
    }

    public IPersonRepository People
    {
        get { return IoC.Container.Resolve<IPersonRepository>(new { DbContext = dbContext }); }
    }

    public IBookRepository Books
    {
        get { return IoC.Container.Resolve<IBookRepository>(new { DbContext = dbContext }); }
    }

    public int Commit()
    {
        return dbContext.SaveChanges();
    }
}

Реализации IBookRepository и IPersonRepository используют конструктор, который принимает DbContext в качестве параметра, и этот DbContext создается в SqlUnitOfWork (код выше), и я передаю этот параметр, используя перегрузку метода Resolve.

У меня вопрос, это как это сделать? Это хорошая практика?

Спасибо!

5
задан Gustav 4 August 2011 в 02:02
поделиться