2014-02-03 2 views
0

Когда приложение запускается/начинается, я хочу выполнить задачи инициализации, такие как получение данных групп из базы данных. Я уже сделал это в одном из моего контроллера в методе контроллера инициализации:Как эффективно выполнять задачи запуска в MVC3

SqlActions sa = new SqlActions(); 
DataTable dt = sa.ExeSP("getdata"); 

//using the datatable I then fill IEnumerable lists for my controller actions. 

Мой вопрос: У меня есть семь контроллеров, и я не хочу, чтобы повторить описанные выше в 7 раз, потому что данные одинаковы по всей контроллеры. Где я могу разместить вышеуказанный код, который затем доступен для всех контроллеров ???

ответ

0

Рассмотрите возможность использования WebActivator:

https://www.nuget.org/packages/WebActivator/

WebActivator представляет собой пакет, который позволяет NuGet другие пакеты легко ввести код для запуска и завершения работы в веб-приложение. Это дает гораздо более чистое решение, чем необходимость изменять global.asax с помощью логики запуска из многих пакетов.

Использование:

using System; 

[assembly: WebActivatorEx.PreApplicationStartMethod(
    typeof(MyNamespace.MyInitializator), "PreStart")] 

namespace MyNamespace { 
    public static class MyInitializator { 
     public static void PreStart() { 
      // Add your start logic here 
     } 
    } 
} 

Вы можете заполнить общий статический кэш данных и использовать его во всех контроллерах.

+0

Спасибо Jakub за ваш ответ, так, например, я хочу поделиться «IEnumerable список» между всеми моими контроллерами - как я могу достичь этого с помощью того, что вы упомянули? – user2906420

+0

Просто создайте статический класс 'classBCache' с' static IEnumerable 'list внутри. И читал о кешировании вообще. –

0

Если вы не распространяете компонент, который должен запускать свою собственную инициализацию в любом проекте, в котором он был удален, сохраните его и используйте Application_Start. Посмотрите ваш текущий global.asax и как он вызывает методы в классах в вашей папке App_Start. Это немного чище, поэтому IMHO и поддерживает текущее соглашение для другого кода запуска в вашем проекте.

Смежные вопросы