#c# #plugins #terminology #extensible #sbt-crossproject
#c# #Плагины #терминология #расширяемый #sbt-crossproject
Вопрос:
Я здесь, потому что у меня есть программа и некоторые функции в моем сознании.
Но я не уверен, как называются эти функции в терминах программирования. Поэтому я не могу даже выполнить правильный поиск в Google по тому же вопросу. Я очень хочу определить, как это называется, чтобы я мог продвигать свой анализ и исследования.
Я разработал программу на C # и Windows Forms. В настоящее время он взаимодействует с API YouTube и отслеживает чат. Я также вызываю некоторые события, когда поступают сообщения чата и когда сообщение соответствует определенному формату / синтаксису. Пока все работает нормально.
То, что я хочу сделать, это:
Если кто-то использует мое программное обеспечение, у кого есть доступ только к двоичным файлам. Но хотят написать свою собственную логику, которая обрабатывает некоторые события, которые я поднимаю. Как они это делают?
Я хочу, чтобы пользователь написал свою собственную программу / класс, поместил его в определенную папку. Я ожидаю, что у него будут методы Start() и End() . Внутри методов они могут написать код для подписки на любое событие по своему выбору и делать то, что им нужно.
Я уже написал код внутри моего основного цикла, который будет проходить через папку, которая должна содержать пользовательские программы, и пытается вызвать метод Start / End их программ / классов.
Что касается меня, как первоначального автора проекта, я могу просто пойти дальше и начать писать код внутри папки. Как только я создаю и выполняю. Все работает нормально. Основная программа запускает запуск / завершение внутри программы / класса, который я добавил. И события также обрабатываются нормально.
Но как насчет того, чтобы кто-то использовал мое программное обеспечение, который хочет обрабатывать его события, без необходимости перекомпилировать мой код. Как они это делают?
Комментарии:
1. Вы можете запросить у своей поисковой
c# plugin
системы.2. Спасибо, Аксель. Сейчас проверяю.
3. Действительно, я думаю, что то, что упомянул Алекс, является хорошим термином. Обычно вы подходите к этому, определяя API-интерфейс «плагина», возможно, через общую сборку, на которую должны быть нацелены ваши «плагины», и интерфейс, который должны реализовывать эти сторонние плагины. Я бы посоветовал попробовать создавать свои собственные расширения таким же образом, так вы столкнетесь с большинством проблем, с которыми сталкиваются другие разработчики при создании своих расширений.
4. Интересно, могли бы вы запустить отдельный исполняемый файл для запуска Lua или другого подобного интерпретатора сценариев.
5. Привет, Халфер, то, что вы предложили, было первым, что пришло мне в голову. Я видел, как игровые движки и чат-бот streamlabs делают это. Но, основываясь на других данных, я узнал и научился разрабатывать подключаемые программы. Пока все идет хорошо. Для начала я использую «Вариант 1», предложенный SAMIKSC.
Ответ №1:
У вас есть следующие варианты
Вариант 1
- Создайте шаблонный проект со всеми необходимыми ссылками и файлом кода (.cs) с методами Start() / End() .
- Добавьте комментарии к методам start() / end() или добавьте пример кода, показывающий, как они могут работать с дополнительными событиями.
- Проект должен нормально компилироваться без какого-либо исходного кода для вашего основного проекта.
- Если вы ожидаете, что пользователи будут использовать код Visual Studio, дайте им инструкции по компиляции с использованием VS code.
- Если они собираются использовать какой-либо текстовый редактор, вам необходимо предоставить им командную строку msbuild для компиляции их кода.
- Наконец, они могут поместить файл кода .cs в определенную папку вместе с вашим основным двоичным файлом проекта и попробовать его.
Вариант 2
- Вышеупомянутый вариант будет работать, только если ваши пользователи также являются программистами.
- Если они являются полутехнологами, вы могли бы предоставить им более простой формат для предоставления дополнительных событий.
- Например, создайте формат json или xml, в котором они могут указать имя события и способ его обработки — либо сценарий, либо выбрать один из нескольких вариантов. Например —
{
"myevents": [
{
"event": "chatUpvote",
"handler": "ThankYouHandler"
},
{
"event": "chatDownvote",
"handler": "TellMeMoreHandler"
}]
}
Комментарии:
1. Я собираюсь попробовать вариант 1, предложенный вами. Обновит информацию о том, как это происходит.
2. Спасибо всем за комментарии :). У меня работают плагины. Теперь все хорошо 🙂