Я бы не пошел с пользовательским маршрутом ControllerFactory. У меня были смешанные результаты при использовании пользовательских заводов контроллеров. Также, если вы будете использовать ServiceStack или какой-либо другой фреймворк, вы будете вынуждены использовать фабрику их контроллеров.
ИМХО предпочтительным способом является использование базового контроллера и обработка там OnActionExecuted
. Я использую его для ввода конфигурации в ViewBag
для всех контроллеров, которые наследуют базу, так что конфигурация доступна через ViewBag
в моих представлениях.
Вы также можете поставить здесь проверки при первом запуске, например:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
// store administration configuration for Views
ViewBag.AdminConfig = AdminConfig;
// check for setup config; we are on the first run, if it doesn't exist
if (Session["IsFirstRun"] == null && SetupConfigProvider.IsFirstRun())
{
// clear the current response to prevent unwanted behaviour
Response.Clear();
// redirect to the Setup controller
filterContext.Result = RedirectToAction("Index", "Setup");
}
}
В действии Index
контроллера Setup
(то есть внутри версии POST действия Index, то есть), вы устанавливаете Session["IsFirstRun"] = false
и все готово.
Поскольку SetupConfigProvider.IsFirstRun()
часто является дорогостоящей операцией ввода-вывода, кэширование значения в сеансе не позволяет приложению всегда просматривать хранилище данных (или диск). Это произойдет только в первый раз, когда оба значения Session["IsFirstRun"]
равны нулю, а IsFirstRun()
возвращаются true
.