Как создать подключаемый сайт 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)

И приятно видеть эту проблему на архитектурном уровне:

Я думаю, что это быстро и эффективно, если вы прочитаете и попробуете некоторые из этих фреймворков. И если вы найдете что-то интересное, прочитайте источник ofcoz.

редактировать

если вы ищете расширяемый блог-движок, то сначала попробуйте Blog Engine. Это из сообщества ASP.NET.

Это звучит как работа для Managed Extensibility Framework от Microsoft. В данный момент он находится в предварительном выпуске, но, похоже, это будет лучше, чем использовать для этого свой собственный фреймворк. Там есть ссылки на руководства о том, как использовать это на сайте.

Если вы хотите увидеть настоящее приложение с открытым исходным кодом, которое реализует эту архитектуру, взгляните на DotNetNuke.

Другие вопросы по тегам