Присмотритесь к своему дизайну.Когда вы смотрите на это функционально, ваш репозиторий на самом деле не зависит от сессии, но от некоторых данных, которые вы храните в сессии.Создайте абстракцию над вещами, которые вы хотите извлечь из сеанса, и дайте хранилищу зависеть от такой абстракции.Например:
public interface IUserProvider
{
int GetCurrentUserId();
}
public class SomeRepository : ISomeRepository
{
private readonly IUserProvider userProvider;
public SomeRepository(IUserProvider userProvider)
{
this.userProvider = userProvider;
}
}
Теперь вы можете создать следующую реализацию этой абстракции:
private class HttpSessionUserProvider : IUserProvider
{
public int GetCurrentUserId()
{
return (int)HttpContext.Current.Session["UserId"];
}
}
Вы можете зарегистрировать этот конкретный тип в конфигурации IoC.
Thisгораздо лучше, потому что вы не хотите, чтобы ваш репозиторий зависел напрямую от HTTP-сессии.Это усложняет тестирование и создает зависимость между вашим хранилищем и конкретной технологией представления.