Есть ли какой-нибудь стандартный способ или шаблон дизайна для этого? - PullRequest
2 голосов
/ 25 января 2012

Я должен написать add-in для существующего приложения.Клиент будет использовать приложение и надстройку.И приложение, и add-in являются черными ящиками для пользователя.Моя надстройка .Net C# dll и код пользователя может в C #.

Теперь я должен предоставить механизм, с помощью которого пользователь может написать некоторый код C#.Этот код будет загружен и выполнен моим add-in во время выполнения, чтобы получить данные, необходимые для надстройки.

Какая лучшая практика для достижения этой цели

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

Просто прояснить немного больше ...

В моемнадстройка, во время выполнения, я получаю строку

Теперь я хочу вызвать некоторую пользовательскую функцию

string resultString = UserFunction("SomeString");

Теперь я хочу знать, как разрешить пользователюзапишите это UserFunction, чтобы я мог вызвать его во время выполнения и получить resultString обратно на основе SomeString

Ответы [ 2 ]

3 голосов
/ 25 января 2012

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

Вы можете разрешить пользователю передавать текстовый код c # функции в вашей dllзатем скомпилируйте этот код в сборку в памяти, но это кажется большой работой, чтобы позволить кому-то передать код в уже скомпилированную DLL для повторной компиляции и повторного запуска.

Вы можетепосмотрите пост здесь для получения дополнительной информации по этой теме: http://www.dotnetthoughts.net/2011/01/09/how-to-compile-c-code-snippet-in-runtime/

Лучше было бы передавать DATA в DLL только в том случае, если вы могли бы каким-то образом реорганизовать свое приложение для поддержки этого.

1 голос
/ 31 января 2012

Ознакомьтесь с ответами на аналогичный вопрос: Можно ли динамически компилировать и выполнять фрагменты кода C #? . Во втором ответе есть хорошее предложение относительно использования базового класса с виртуальными методами, которые переопределяются вашими участниками.

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