Совместное использование пользовательских элементов управления несколькими сайтами - PullRequest
3 голосов
/ 14 апреля 2010

В настоящее время я работаю над проектом, в котором участвуют три разных веб-сайта с множеством общих функций. На данный момент общая функциональность размещена на другом веб-сайте, полном пользовательских элементов управления.

Проблема заключается в совместном использовании пользовательских элементов управления на нескольких веб-сайтах. Оглядываясь на SO и другие веб-сайты, кажется, что единственным решением является использование виртуальных каталогов. Поскольку это работоспособное решение (мы используем его на данный момент), оно не кажется «чистым» решением.

Какие существуют "лучшие практики" при совместном использовании общих функций (включая GUI / HTML) между различными сайтами?

Можно ли (например) создать один проект веб-приложения и развернуть подкаталоги (каждый со своим web.config) в разных производственных средах?

Ответы [ 3 ]

3 голосов
/ 20 мая 2010

Я занимался этим уже довольно давно, и использовал как виртуальные каталоги, так и подходы "пользовательской библиотеки управления", и нашел, что они оба хотят. Я удивлен, что Microsoft не решила эту проблему, чтобы скомпилировать пользовательские элементы управления, которые будут использоваться как серверные элементы управления.

В любом случае ...

Есть два удобства, на которые большинство из нас обращают внимание при попытке создания библиотеки пользовательского элемента управления:

  1. Легко развиваться против. Если мы изменить пользовательский элемент управления, мы хотим сделать это одно место. Мы хотим быть в состоянии редактировать и отлаживать в сети мы работаем, без необходимости управлять несколькими копиями ascx файл.
  2. Простота развертывания. Мы хотим быть возможность захватить и опубликовать ascx файлы на нескольких веб-сайтах без особых хлопот.

К сожалению, подход виртуального каталога адресован только адресам № 2, а «библиотеки управления пользователями» - адресам № 2 и только части № 1. С помощью «библиотеки пользовательского управления» вы можете отлаживать исходный код пользовательской библиотеки управления, но если вы отредактируете ascx в своем рабочем вебе, изменения будут перезаписаны при следующем создании «библиотеки пользовательского управления». Это похоже на то, как работает серверный элемент управления: его нужно редактировать в другом месте и нужно скомпилировать для обновления. Исключением является то, что «пользовательские библиотеки управления» должны быть скопированы, а не просто обновлять ссылку на DLL.

Решение

То, что я использовал для решения # 1, это символические ссылки . Создайте общую папку элементов управления в своем хранилище и вставьте ссылку на эту папку в каждую из веб-страниц по своему усмотрению. Любые изменения, которые вы делаете в папке символических ссылок, делаются в исходной папке общих элементов управления.

Чтобы решить # 2, я просто развернул полные сайты с элементами управления, скопированными в их соответствующие местоположения. Вместо этого вы также можете легко создать виртуальный каталог и не развертывать папку с символическими ссылками на каждом веб-сайте. Я склонен отвлекаться от виртуальных каталогов за общие хост-источники управления пользователями, опасаясь проблем с производительностью (много сетей, тонны трафика).

Надеюсь, это поможет!

1 голос
/ 14 апреля 2010

Существует решение для совместного использования пользовательских элементов управления путем создания пользовательских элементов управления , описанных ScottGu. На мой взгляд, это решение не очень чистое, потому что вам нужно скопировать предварительно скомпилированные файлы, чтобы это решение работало.

Я решил использовать настраиваемые веб-элементы управления в отдельных библиотеках классов для обмена общими функциями пользовательского интерфейса. Но, возможно, решение Скотта сработает для вас.

0 голосов
/ 14 апреля 2010

ИМХО, лучше использовать решение Virtual Directory, даже если оно не чистое.Это решило бы большую головную боль, поскольку вы можете использовать ее для нескольких веб-сайтов без необходимости развертывания дополнительных файлов на каждом веб-сайте, и если есть изменения, вы должны сделать это только в одном месте.

...