Как создать подключаемый сайт ASP.Net?
Каковы лучшие методы создания сайта с возможностью разработки плагинов для него?
Как вы хотите создать модуль блога, и вы хотите, чтобы пользователи или соавторы добавляли плагины для расширения функциональности этого модуля.
Обновление: спасибо за сверхскоростные ответы, но я думаю, что для меня это слишком. Разве нет более простого решения, как я видел систему создания плагинов blogengine, просто украсьте плагин класса с помощью [Extension].
Я как разработчик среднего уровня, так что я думал о базовом классе, наследовании, интерфейсах, что вы думаете?
4 ответа
редактировать
Я полностью переписал свой ответ на основе вашего вопроса редактирования.
Позвольте мне показать вам, насколько просто реализовать архитектуру плагинов с минимальными шагами.
Шаг 1: Определите интерфейс, который будут реализовывать ваши плагины.
namespace PluginInterface
{
public interface IPlugin
{
string Name { get; }
string Run(string input);
}
}
Шаг 2: Создайте плагин, который реализует IPlugin.
namespace PluginX
{
using PluginInterface;
public class Plugin : IPlugin
{
public string Name
{
get { return "Plugin X"; }
}
public string Run(string input)
{
return input;
}
}
}
Шаг 3: Запустите плагин.
namespace PluginTest
{
using System;
using System.IO;
using System.Runtime.Remoting;
using PluginInterface;
class Program
{
static void Main( string[] args )
{
string pluginFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PluginX.dll");
ObjectHandle handle = Activator.CreateInstanceFrom(pluginFile, "PluginX.Plugin");
IPlugin plugin = handle.Unwrap() as IPlugin;
string pluginName = plugin.Name;
string pluginResult = plugin.Run("test string");
}
}
}
Имейте в виду, что это просто основной, самый простой пример архитектуры плагинов. Вы также можете делать такие вещи, как
- создать плагин хост для запуска вашего плагина внутри его собственного
AppDomain
- выберите или интерфейсы, абстрактные классы или атрибуты, чтобы украсить ваши плагины
- использовать рефлексию, интерфейсы, слитки или делегаты, генерируемые IL, чтобы выполнить работу по позднему связыванию
если ваш дизайн так диктует.
Ценно разделить технические и архитектурные перспективы:
- На уровне кода MEF (Managed Extensibility Framework) является хорошим началом. Вот простой пример.
- Любой другой DI (структура внедрения зависимостей) может хорошо работать (т.е. Unity)
И приятно видеть эту проблему на архитектурном уровне:
- Фабрика программного обеспечения веб-клиента от p&p. Вот не только техническая, но и техническая информация о том, "Как создавать составные веб-приложения?". Смотрите примеры., Существует пакет модульности Boundle.
- Spring Framework.
Я думаю, что это быстро и эффективно, если вы прочитаете и попробуете некоторые из этих фреймворков. И если вы найдете что-то интересное, прочитайте источник ofcoz.
редактировать
если вы ищете расширяемый блог-движок, то сначала попробуйте Blog Engine. Это из сообщества ASP.NET.
Это звучит как работа для Managed Extensibility Framework от Microsoft. В данный момент он находится в предварительном выпуске, но, похоже, это будет лучше, чем использовать для этого свой собственный фреймворк. Там есть ссылки на руководства о том, как использовать это на сайте.
Если вы хотите увидеть настоящее приложение с открытым исходным кодом, которое реализует эту архитектуру, взгляните на DotNetNuke.