Использование CSharpCodeProvider для разрешения пользовательских функций

У меня есть приложение asp.net (c #). Мне нужно предоставить пользователям способ создания гибких правил для расчета даты вступления в силу с учетом заданного срока и даты зачисления.

Некоторые примеры правил, которые могут быть использованы:

Позднее Hiredate или EnrollmentdateHireDate + 90 днейПервое число месяца после даты зачисленияЕсли дата регистрации до 15 числа месяца, то дата вступления в силу - 1-е число следующего месяца. Если это 15 или позже, это 1-е число месяца после этого.

Я начал с нескольких полей смещения (смещение дня, смещение месяца и т. Д.), Но, столкнувшись с новыми требованиями, я понял, что текущий подход недостаточно гибок.

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

Моя первоначальная реакция заключалась в поиске DSL, который позволил бы мне определить функции манипулирования датами и интегрировать их в мое решение. Однако мой поиск подходящего DSL ничего не дал.

Теперь мне интересно, может ли CSharpCodeProvider работать как компонент решения. Если я вытащу строку из базы данных и скомпилирую ее с помощью CsharpCodeProvider, могу ли я убедиться, что полученный код соответствует сигнатуре функции (принимает 2 параметра datetime и возвращает datatime)?

Есть ли способ убедиться, что функция не имеет побочных эффектов? Например, нет ввода / вывода. Нет чтения или сеанса, кеша или приложения.

Ответы на вопрос(2)

Ваш ответ на вопрос