2009-03-17 2 views
1

Как программист perl Я могу оценить строки как код Если бы я хотел, могу ли я сделать то же самое в C# (со строками или другим объектом, содержащим пользовательский ввод)?Как написать код, расширяемый пользователем?

Что я хочу сделать, так это создать объект, где его методы могут быть предварительно определены в моем исходном коде или могут быть определены во время выполнения пользователем путем ввода строки, представляющей код C# для метода или SQL-запроса , Вызов метода всегда должен возвращать свое скалярное значение в виде строки, я считаю, что было бы желательно предоставить некоторые предопределенные «системные» переменные для использования в вызове метода и некоторый код «Очистка», чтобы проверить, что строка фактически возвращена ,

псевдопользователей - Структура

Object Statistic 
     string Name; 
     functionref Method; 

Архитектура Я имею в виду, что в основном собирать их в режиме реального времени и добавлять их по желанию пользователя в список статистики, пользователь хочет, чтобы отобразить. Определенная статистика может быть сохранена в файл и загружена в основную программу во время инициализации. Таким образом, пользователю не нужно пересматривать желаемую статистику. Необходимо изменить/обновить/удалить статистику.

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

Любые идеи о том, где начать чтение, чтобы выполнить это на C#?

Назначение этой возможности - это программа, которая отображает статистику для текущей системы/базы данных. Значения для просмотра не обязательно известны во время разработки, а также как определить желаемую ценность для извлечения. Я хочу разрешить Пользователю определять любую статистику за пределами любого предварительного кода для системы.

ответ

1

Отъезд this earlier question.

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

Кроме того, не ожидайте, что обычные пользователи (кто бы они ни были), чтобы иметь возможность кодировщиков.

Возможно, вы захотите предложить ограниченную, но более управляемую расширяемость, например. dependency injection.

1

Я расскажу о том, что сказал Понтус, особенно в отношении стабильности, стоимости поддержки и ожидания того, что пользователи будут писать код. Я также добавлю производительность в список, так как эти пользователи, вероятно, не будут знать о последствиях их кода. По этим причинам и другим, ориентированные на пользователя eval-подобные конструкции не считаются разумными в C#, и, вероятно, также не должны быть в perl.

Вместо этого просмотрите пространство имен System.AddIn в .Net для обеспечения функциональности плагина для вашего приложения.

Смежные вопросы