Я избегаю внедрения в моей ISession в каждый контроллер, таким образом избегая этого: Ninject with base controller?
Я пытаюсь получить доступ к своему IRepository внутри моего базового контроллера, чтобы я могиспользовать его во всем приложении, есть ли проблемы с управлением временем жизни объекта с помощью второго метода ниже?По сути, я хочу создавать его снова каждый раз, когда он мне нужен для каждого запроса на действие ...
// Использование Ninject для инъекции ...
private readonly IReadOnlySession _repo;
public SimpleController(IReadOnlySession repo)
{
_repo = repo;
}
// Получение из базового контроллера -> мой предпочтительный метод ...
public abstract class AbstractBaseController : Controller
{
public AbstractBaseController() { }
private static IReadOnlyGenericRepository readonlysession;
public static IReadOnlyGenericRepository ReadOnlySession
{
get { return (readonlysession ?? (readonlysession = new ReadOnlyGenericRepository())); }
}
}
// Затем доступ с использованием
var detail = ReadOnlySession.Single<Cat>(x=> x.CatID== _catid);
IReadOnlyGenericRepository просто наследуется от:
public interface IReadOnlySession
{
T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new();
System.Linq.IQueryable<T> All<T>() where T : class, new();
}
Обновление: объявление кода нижев моем AbstractBaseController можно выполнить модульное тестирование?
private IReadOnlySession readonlysession;
public IReadOnlySession _repo
{
get { return (readonlysession ?? (readonlysession = GetReadOnlySession())); }
}
protected virtual IReadOnlySession GetReadOnlySession()
{
return new ReadOnlyGenericRepository();
}