Общий доступ ко всем пользователям mvc Webapp - PullRequest
0 голосов
/ 30 октября 2009

Мое веб-приложение готовит из БД на одну или две минуты определенный и доступный только для чтения список объектов, один раз только при запуске IIS. Это больше не изменится, если администратор не инициирует воссоздание по определенному URL.

Интерфейс объектов выглядит следующим образом:

public interface IProductsRepository {
    IQueryable<Row1> ProductItmes { get; }
    IQueryable<Row2> ProductLegItems { get; }
}

Теперь я не совсем уверен, куда поместить объект, чтобы он был доступен с любого контроллера. Должен ли я положить метод загрузки в protected void Application_Start() как статический объект? Каков наилучший подход?

Ответы [ 4 ]

1 голос
/ 30 октября 2009

вам нужно использовать инфраструктуру внедрения зависимостей, чтобы вы могли создать ее и передать ее всем своим контроллерам. Это не входит в комплект поставки asp.net-mvc, но вы можете найти ряд опций, которые помогут, например, Castle Windsor или Autofac

0 голосов
/ 30 октября 2009

Вы можете сохранить его в объекте Application, но вы должны внедрить его в Controller. Вы не должны ссылаться непосредственно на объект Application, потому что это сделает ваше приложение менее тестируемым. Я использую Ninject (http://ninject.org/) для этой цели.

0 голосов
/ 30 октября 2009

Хорошим местом был бы Кеш. Вы можете загрузить кэш на Application_Start ()

0 голосов
/ 30 октября 2009

Это может или не может удовлетворить ваши потребности, но Castle Windsor позволяет вам указать, сколько экземпляров будет иметь компонент (например, хранилище данных). У меня лично была опечатка при работе с этим ( lifesyle вместо lifestyle ), в результате чего хранилище данных сохранялось после публикации без моей инициализации.

http://www.castleproject.org/container/documentation/trunk/usersguide/lifestyles.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...