Trabajando en un proyecto con
Monorail, el cual estoy desarrollando desde OSX con
Mono, el motor de vistas
Brail fallaba al compilar una de las vistas, este problema se me presento solo con Mono, ya que en MS .NET la vista funcionaba como debia.
Investigando el problema, me di cuenta que Brail invoca por medio de reflection a los metodos que se indican dentro de la vista, y es precisamente aqui donde Brail fallaba al ejecutar; el metodo en cuestion era el metodo
Create de la clase
DictHelper dentro del Framework de Monorail, el cual se le pasan parametros de la forma: "property1=value", "property2=value", etc, y el metodo regresa un objeto del tipo
IDictionary, este metodo acepta parametros de la forma: Create(params string args).
Params es una palabra clave de C# que permite definir un parametro especial que acepte una cntidad indefinida de parametos, por ejemplo Create esta definido come se mostro arriba, pero la forma en como lo puedo llamar es: DictHelper.Create("p1=v1", "p2=v2", "p3=v3"), es decir le paso un arreglo de parametros. .NET cuenta con un attributo
ParamArray, el cual puede ser utilizado desde cualquier lenguaje, lo que sucede una vez que el programa ha sido compilado .NET toma los parametros y los convierte en un arreglo de parametros para que pueda ser pasado al metodo.
El problema de Mono es que no implementa funcionalidad para llamar mediante reflection metodos que usen la palabra clave params, pude haber creado un "bug" para reportar el problema a los desarrolladores de Mono y ya, pero al final me decidi a tratar de implementar el soporte para esta funcionalidad.
Despues de analizar como Mono invoca metodos por reflection, me fue necesario modificar los archivos
Binder.cs y
MonoType.cs.
El
parche y programa de prueba lo envie a la lista de
Mono-devel, de momento estoy a la espera de que lo revisen y me digan si lo aceptan o no.