#asp.net #dynamic #client #master-pages
#asp.net #динамический #клиент #основные страницы
Вопрос:
В текущем проекте, над которым я работаю, мы разрабатываем продукт, который в конечном итоге будет использоваться на разных клиентских сайтах. На данный момент все сделано так, что весь код для всех клиентов включен в одно решение, в настоящее время существует только около 5 клиентов, так что это управляемо, но я хотел бы реорганизовать это, чтобы мы могли перенести эти фрагменты в области, специфичные для клиента.
Что касается фактических сборок для разных клиентов, я думаю, мы можем легко добиться чего-то гибкого, используя MEF или IOC.
Область, в которой я не уверен, — это веб-сторона вещей. У каждого текущего клиента есть своя главная страница, и эти главные страницы довольно радикально отличаются, помимо наличия одинаковых областей содержимого, настройка, вероятно, не может быть достигнута только с помощью чистого CSS.
Есть ли способ создать «базовую» главную страницу, которая обычно использовалась бы, а затем, если мы хотим развернуть на клиенте A, мы можем просто каким-то образом внедрить клиент в качестве главной страницы. В настоящее время это обрабатывается всеми страницами содержимого, ссылающимися на Master.master в качестве своей главной страницы, а затем есть общий Master.master, при развертывании на клиенте A мы переименовываем Master.master во что-то и переименовываем специально разработанную главную страницу для клиента A (ClientA.master) в Master.master и развертываем.
Недостатком всего этого является то, что все главные страницы хранятся в одном веб-проекте, что кажется немного неправильным, если мы пытаемся перейти к основной ветке, не зависящей от клиента, и если другие главные страницы не будут удалены в рамках развертывания, клиент получит их копию на своем сервере, даже если они не используются, и предпочтительно, чтобы мы не хотели, чтобы один клиент мог переключаться на другой просмотр клиентов и т.д. (не то, чтобы с точки зрения безопасности это имело какой-либо эффект)
Ответ №1:
Вы проверили темы. Мы уже использовали темы для такого рода вещей раньше.
Если для вас этого недостаточно, вы можете делать то, что хотите, на этапе pre_init. Мы используем этот код в некоторых местах
protected void Page_PreInit(object sender, EventArgs e)
{
this.MasterPageFile = "~/page.master";
}
Вы, конечно, можете использовать логику, чтобы определить, какую главную страницу вы хотите использовать.
Комментарии:
1. Да, мы используем темы, но все, чего я пытаюсь избежать, это включения дизайнов других клиентов и т.д., Когда они не нужны