.Net и архитектуры плагинов - PullRequest
6 голосов
/ 01 августа 2009

В продолжение дискуссий Джеффа и Джоэла о архитектурах плагинов.

Плагины в C ++ (с использованием загруженных во время выполнения dll) всегда немного болезненны. Вам нужно проделать большую работу, чтобы включить их, и затем плагин также должен быть написан на C ++, часто даже с тем же компилятором. COM-объекты и ActiveX решили некоторые из этих проблем, но представили несколько своих.
Затем добавить, скажем, интерфейс Python к приложению C ++ - это большой объем работы.

Правильно ли я считаю, что все библиотеки (или сборки или как вы их называете), написанные на одном языке .Net, всегда могут вызываться с другого языка .Net? И могут ли объекты типы данных автоматически передаваться между ними?

Предположительно, поскольку все языки .Net также используют Winforms (или WPF) для графического интерфейса, предоставление плагинов доступа к графическому интерфейсу основного приложения также относительно просто.

Извините, если это довольно очевидный момент, я просто старомодный программист C ++. Но легкость повторного использования существующих библиотек C ++ через C ++ / CLI убедила меня в том, что C # /. Net может стоить больше исследований.

Edit - спасибо, я хотел обсудить, были ли плагины причиной для перехода к .Net. Возможность писать Ironpython, в то время как мои бизнес-пользователи могли написать простой плагин на VB, а технические пользователи могли создавать что-то умное в F # без необходимости выполнять больше работы, было хорошей причиной для перехода с C ++

Ответы [ 4 ]

3 голосов
/ 01 августа 2009

Правильно ли я считаю, что все библиотеки (или сборки, или как вы их называете), написанные на одном языке .Net, всегда могут вызываться с другого языка .Net? И могут ли объекты типы данных автоматически передаваться между ними?

Да. В .NET кросс-языковая совместимость возможна благодаря CTS (предлагает набор общих типов данных для использования на всех .NET-совместимых языках и обеспечивает совместимость типов) и CLS (определяет набор минимальных стандартов, которые все компиляторы языка .NET должен соответствовать и, таким образом, обеспечивает взаимодействие языков). Во время компиляции исходный код любого .NET-совместимого языка преобразуется в код промежуточного языка соответствующим языковым компилятором. Поскольку вся сборка .NET (EXE или DLL) существует как промежуточный язык, они могут взаимодействовать между ними. Все .NET-совместимые языки используют одни и те же типы данных и представлены только как типы .NET. Поэтому, используете ли вы int в C # или Integer в Visual Basic .NET, в IL он представлен как System.Int32. [ Источник ]

1 голос
/ 01 августа 2009

Если вы ищете библиотеки плагинов в .NET, есть пара опций, которые мне известны:

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

0 голосов
/ 01 августа 2009

Да, вы можете достичь их всех через Отражение

есть статьи о структуре плагина c #, такие как this

0 голосов
/ 01 августа 2009

Основная проблема с плагинами под .Net заключается не в возможности вызова кода из dll плагина (и взаимодействия с ним), а в вопросах безопасности. Их тоже можно решить, вы можете посмотреть здесь (примеры, которые там связаны, также должны представлять очень простой хост + плагин) Как создать модель плагина в .NET с песочницей?

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

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