Code: Select all
public class HomeController : BaseController
{
private IRoleRepository RoleRepository { get; set; }
public HomeController (IRoleRepository repository)
{
RoleRepository = repository;
}
.......
}
1. Можно как то использовать репозиторий только там где надо? Можно, напрямую создавая его только в тех методах где он нужен. Но тут будут кричать приверженцы unit test'ов типа если не передавать в конструкторе то как же юнит тесты писать, типа контроллер будет coupled с конкретным репозиторием. Есть ли какой то еще способ?
2. А как тогда закрывать соединение с базой, которой открыл этот репозиторий?
Каждый конкретный репозиторий унаследован от соотвествующего интерфейса и плюс от абстрактного класса BaseRepository, в котором находится собвственно контекст для работы с базой данных
Code: Select all
public abstract class BaseRepository : IDisposable
{
private IContext context; // в конкретном случае здесь подставляется сессия NHibernate
public void Dispose ()
{
context.Dispose();
}
}
public class RoleRepository : BaseRepository, IRoleRepository
{
}