Uso de CSharpCodeProvider para permitir funciones creadas por el usuario

Tengo una aplicación asp.net (c #) existente. Necesito proporcionarles a los usuarios una manera de crear reglas flexibles para calcular una fecha efectiva en una contratación y una fecha de inscripción.

Algunos ejemplos de reglas que podrían usarse:

El último de la fecha de contratación o matrículaFechas de alquiler + 90 díasEl primer día del mes posterior a la fecha de inscripción.Si la fecha de inscripción es anterior al 15 del mes, entonces la fecha de vigencia es el 1º del mes siguiente. Si es el 15 o después, es el 1 de cada mes después de eso.

Comencé con un puñado de campos de compensación (compensación de día, compensación de mes, etc.), pero a medida que me encuentro con nuevos requisitos, me estoy dando cuenta de que el enfoque actual no es lo suficientemente flexible.

Lo que me gustaría hacer es permitir que el usuario final defina una función que devuelva una fecha dada dos parámetros (contratado, fecha de inscripción) y almacene esa función en la base de datos. Cuando necesito calcular el efecto, sacaría esta función de la base de datos y la ejecutaría pasando los parámetros para obtener mi efecto.

Mi reacción inicial fue buscar un DSL que me permitiera definir las funciones de manipulación de fechas e integrarlo en mi solución. Sin embargo, mi búsqueda de un DSL adecuado no ha resultado nada.

Ahora me pregunto si CSharpCodeProvider podría funcionar como un componente de la solución. Si saco una cadena de una base de datos y la compilo a través de CsharpCodeProvider, ¿puedo exigir que el código resultante coincida con una firma de función (toma 2 parámetros de fecha y hora y devuelve una fecha y hora)?

¿Hay alguna manera de garantizar que la función no tenga ningún efecto secundario? Por ejemplo, No I / O. No hay lectura o sesión, caché o aplicación.

Respuestas a la pregunta(2)

Su respuesta a la pregunta