que tienen una anotación # C, que es:¿Cómo se pone un Func en un atributo C# (anotación)?
[AttributeUsage(AttributeTargets.Method)]
public class OperationInfo : System.Attribute {
public enum VisibilityType {
GLOBAL,
LOCAL,
PRIVATE
}
public VisibilityType Visibility { get; set; }
public string Title { get; set; }
public Func<List<string>, List<string>> Func;
public OperationInfo(VisibilityType visibility, string title, Func<List<string>, List<string>> function) {
Visibility = visibility;
Title = title;
Func = function;
}
}
Como se puede ver, hay una propiedad que es un Func y que desea llamar de forma dinámica. Básicamente, me gustaría analizar todos los métodos que tienen esta anotación y luego llamar a Func binded a la anotación.
me gustaría utilizar de esta manera (esto es un ejemplo sencillo de una función de eco, que recibe una cadena y devolver la misma cadena):
[OperationInfo(OperationInfo.VisibilityType.GLOBAL, "echo", IDoEcho)]
public static string DoEcho(string a)
{
return a;
}
[OperationInfo(OperationInfo.VisibilityType.PRIVATE, null, null)]
public static List<string> IDoEcho(List<string> param) {
return new List<string>() { DoEcho(param[0]) };
}
tengo ningún error en mi Clase de anotación pero cuando se trata de regenerar toda la solución, cada vez que declaro un método con la anotación recibo un error que me dice que debo usar literales en una anotación.
Entiendo que hay limitaciones, pero ¿hay alguna manera de evitar este problema? Sé que puedo usar una cadena en lugar de una Func, y buscar dinámicamente la función cuyo nombre es el mismo que la cadena, pero me gustaría no hacerlo.
Gracias por ayudar :)
Puede que no se vea bonito, pero a menudo encontrará cadenas como argumentos para los atributos porque los valores deben conocerse en tiempo de compilación. – danludwig