У меня есть аннотация C #, которая:
[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;
}
}
Как видите, есть свойство Func, и я хочу, чтобы оно вызывалось динамически. По сути, я хотел бы проанализировать все методы, которые имеют эту аннотацию, а затем вызвать Func, связанный с аннотацией.
Я бы хотел использовать его следующим образом (это простой пример функции эха, которая получает строку и возвращает ту же строку):
[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]) };
}
У меня нет ошибок в моем классе аннотаций, но когда дело доходит до восстановления всего решения, каждый раз, когда я объявляю метод с аннотацией, у меня появляется ошибка, которая говорит мне, что я должен использовать литералы в аннотации.
Я понимаю, что есть ограничения, но есть ли способ избежать этой проблемы? Я знаю, что могу использовать строку вместо Func и динамически искать функцию, имя которой совпадает со строкой, но я бы не хотел этого делать.
Спасибо за помощь:)