Добавить дополнения на скомпилированном языке - PullRequest
0 голосов
/ 19 января 2009

Мы разрабатываем CMS в ASP.NET. Нам нравится идея надстроек (как в Wordpress, где любой разработчик может добавить кнопку меню или виджет), и мы хотели бы позволить разработчикам сделать то же самое с нашей системой.

Однако я думаю, что тот факт, что C # является скомпилированным языком, является препятствием на пути дополнений.

Я прав? Или есть способ создания надстроек для приложения ASP.NET?

Ответы [ 7 ]

3 голосов
/ 19 января 2009

Тот факт, что C # - это скомпилированный язык, не является проблемой вообще. Фактически .NET Framework должен относительно легко загружать другой код (так же, как в Java по той же причине). Посмотрите на Managed Extensibility Framework , которая посвящена загрузке дополнений в управляемом коде.

2 голосов
/ 19 января 2009

Это вовсе не препятствие. MEF уже упоминалось, вы также можете использовать:

1 голос
/ 19 января 2009

Не так уж сложно поставить крючки на место. Вы должны заранее определить, где появятся дополнительные функции. Например: при рисовании меню вы можете использовать отражение для поиска других библиотек (с конкретными именами и местоположениями) для функции «BuildMenu». Вы будете определять API для этой сигнатуры функции. Возможно, придется вернуть список элементов, которые будут добавлены в коллекцию элементов базового меню.

1 голос
/ 19 января 2009

В C # вы можете создавать любые сборки, связывать их как файлы DLL, а затем делать все, что захотите.

Обычным случаем может быть определение некоторого интерфейса плагинов, который должен быть реализован всеми плагинами.

Затем вы можете загрузить все плагины из файловой системы (перебирая библиотеки DLL плагинов), найти класс внутри, который реализует интерфейс, создать его экземпляр и работать с ним.

Если вы хотите обеспечить плагины с возможностью выгрузки и безопасностью, вы можете создать домен приложения и загрузить в него плагины, что повышает сложность, но также повышает стабильность (плохой плагин не приведет к сбою приложения).

Пожалуйста, спросите более конкретно, если вы хотите конкретный ответ: -)

1 голос
/ 19 января 2009

Корпорация Microsoft создала Managed Extensibility Framework (MEF) специально для этой проблемы: предоставление плагинов .NET для приложений .NET. Это среда, которую (будущие версии) Visual Studio использует для написания управляемых плагинов.

Однако, , пожалуйста подумайте об использовании динамического языка сценариев для этого! Такие проблемы точно , для которых они специально предназначены. Если вы размещаете Dynamic Language Runtime в своем приложении, это означает, что ваши пользователи могут расширять приложение не только на языке сценариев a , но даже на любом динамическом язык (сценарий или другой), для которого существует реализация DLR: Ruby, Python, Smalltalk, Scheme, JavaScript, PHP, вы называете это. Самый большой недостаток: DLR еще не выпущен.

1 голос
/ 19 января 2009

Я не знаю, как это делается в Wordpress, но должно быть много способов. Вы можете разрешить разработчикам загружать свои сборки с помощью скомпилированного кода, или вы можете разрешить им загружать код в C # или IronPython или во все, что поддерживается и динамически компилировать его. Возможно, вы можете использовать WebParts для своей задачи.

1 голос
/ 19 января 2009

Я не уверен специально для ASP.NET, но в единственном из известных мне скомпилированных языков программирования (Objective-C / Cocoa) есть концепция пакетов, которые можно загружать динамически. Я не уверен, как это работает на бэкэнде, но я предполагаю, что есть какая-то похожая система для C # / ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...