У меня есть эти интерфейсы:
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.
У меня вопрос, это как это сделать? Это хорошая практика?
Спасибо!