Контекст контроллера доступа/ TempData из бизнес-объектов

Я пытаюсь создать поставщика сеанса/временных данных, который можно поменять местами. Поставщик по умолчанию будет работать поверх asp.net mvc, и ему необходимо получить доступ к TempData .net mvc из класса бизнес-объектов. Я знаю, что временные данные доступны через контекст контроллера, но я не могу найти, отображается ли это через HttpContext или что-то в этом роде. Я действительно не хочу передавать контекст контроллера в качестве аргумента, так как это разбавит определение моего интерфейса, поскольку это требуется только поставщику сеансов на основе asp.net, другим (использующим NoSQL DB и т. д.) не важен контекст контроллера.

Чтобы уточнить, добавьте еще немного кода здесь. мой интерфейс ISession выглядит так. и когда этот код пойдет в производство, ожидается, что данные сеанса/tempdata будут работать с использованием NoSql db. Но мне также нравится иметь другую реализацию, которая работает поверх asp.net mvc session/tempdata для моего тестирования разработчиков и т. д.

общедоступный интерфейс ISession

{
    T GetTempData<T>(string key);

    void PutTempData<T>(string key, T value);

    T GetSessiondata<T>(string key);

    void PutSessiondata<T>(string key, T value);

}

person thanikkal    schedule 05.03.2011    source источник


Ответы (1)


Я не знаю точно, что вы пытаетесь сделать, но TempDataDictionary реализует IDictionary<string, object>, чтобы ваши бизнес-объекты могли принимать его в качестве параметра или использовать внедрение конструктора. Затем вы можете заставить свой контроллер передать TempData как параметр бизнес-объекту. Используя интерфейс словаря, ваши бизнес-объекты больше не зависят от ASP.NET MVC.

person Darin Dimitrov    schedule 05.03.2011
comment
Спасибо за ответ. Я пытался избежать передачи контекста tempdata/controller этим методам. надеюсь, что мое редактирование выше сделает его более понятным. - person thanikkal; 05.03.2011
comment
@thanikkal, вы пытаетесь переопределить поставщика сеансов ASP.NET по умолчанию, который хранит данные в памяти, с помощью специального поставщика? - person Darin Dimitrov; 05.03.2011
comment
Не уверен, что переопределение - это термин, но да, я пытаюсь иметь своего собственного поставщика сеансов. - person thanikkal; 05.03.2011
comment
@thanikkal, в этом случае вам нужно будет написать Session-State Store Provider путем реализации класса SessionStateStoreProviderBase и регистрации поставщика состояния сеанса. в веб.конфигурации. - person Darin Dimitrov; 05.03.2011
comment
Спасибо за указание. Но я не совсем ищу путь msdn для сеансовых вещей. и мой первоначальный вопрос о доступе к внутренним объектам MVC извне до сих пор остается без ответа. - person thanikkal; 06.03.2011
comment
Размышляя над этим еще раз, я думаю, что это, вероятно, разумный подход для использования встроенного сеанса asp.net, поскольку он уже имеет возможность поддерживать разных провайдеров, и есть легкодоступные провайдеры mysql и mongo db. Я переместил вышеуказанные методы в качестве методов расширения контроллера, чтобы получить строго типизированные объекты из сеанса и временных данных. - person thanikkal; 08.03.2011