Gracias a las sugerencias de previous question, estoy ocupado probando IronPython, IronRuby y Boo para crear una DSL para mi aplicación C#. El primer paso es IronPython, debido a la mayor base de usuarios y conocimiento. Si puedo hacer que algo funcione bien aquí, puedo parar.Simplfing DSL escrito para una aplicación C# con IronPython
Aquí está mi problema:
quiero mi guión IronPython para tener acceso a las funciones de una clase llamada Lib. En este momento puedo agregar el ensamblado al tiempo de ejecución IronPython e importar la clase ejecutando la sentencia en el ámbito creé:
// load 'ScriptLib' assembly
Assembly libraryAssembly = Assembly.LoadFile(libraryPath);
_runtime.LoadAssembly(libraryAssembly);
// import 'Lib' class from 'ScriptLib'
ScriptSource imports = _engine.CreateScriptSourceFromString("from ScriptLib import Lib", SourceCodeKind.Statements);
imports.Execute(_scope);
// run .py script:
ScriptSource script = _engine.CreateScriptSourceFromFile(scriptPath);
script.Execute(_scope);
si quiero correr Lib :: imprimirHola, que es sólo una declaración de estilo hola mundo , mi script Python contiene:
Lib.PrintHello()
o (si no es estática):
library = new Lib()
library.PrintHello()
¿Cómo puedo cambiar mi entorno por lo que sólo puede tener statments básicos en la secuencia de comandos de Python como Thi s:
PrintHello
TurnOnPower
VerifyFrequency
TurnOffPower
etc...
Quiero estos scripts para ser simples para un no-programador escribir. No quiero que tengan que saber qué es una clase o cómo funciona. IronPython está realmente allí para que algunas operaciones básicas como for, do, if y una definición básica de funciones no requieran que escriba un compilador para mi DSL.
Se ve aún más feo en IronRuby donde tengo que escribir ScriptLib :: Lib.PrintHello() ¿Hay alguien familiarizado con cualquiera IronRuby o IronPython de esta manera? ¿Necesito un script de configuración de python para mapear todos los métodos/variables antes de ejecutar un script de prueba? Tenía la esperanza de hacer esto en C#. – cgyDeveloper