获取函数的属性

本文关键字:属性 函数 获取 | 更新日期: 2023-09-27 17:50:14

我需要检查传入的Func<TIn, TOut>的特定属性。

到目前为止,我有:

var methodInfo = cachedMethod.GetMethodInfo();
var isCachable = methodInfo.CustomAttributes.
                       Any(x => x.AttributeType == typeof(CachedAttribute));

然而,我发现CustomAttributes属性是空的。

找到应用于传入函数的属性的正确方法是什么?在我的例子中,函数是另一个类中的静态方法。

下面是一个小示例,展示了我是如何使用它的:

HTML帮助器:

        public static IHtmlString CachedPartial<TModel>(this HtmlHelper helper, 
          string partialName, 
          TModel model, 
          Func<string, string> cachedMethod)
        {
            var methodInfo = cachedMethod.GetMethodInfo();
            var isCachable = methodInfo.IsDefined(typeof (CachedAttribute));
            if (!isCachable)
            {
                throw new Exception("...");
            }
            return new MvcHtmlString(cachedMethod("foo"));
        }

缓存的方法

        [Cached]
        public static string GenrateSiteMapGraphHtml(string siteCode)
        {
            return "Foo";
        }

这是从Razor视图中调用的:

@Html.CachedPartial("Foo", 
                     Model, 
                     HtmlHelperExtensions.GenrateSiteMapGraphHtml)

获取函数的属性

我可能不太明白你的问题是什么,但我想建议两件事:

  1. 你需要确保CustomAttributes不是空的,使用

    if (methodInfo.CustomAttributes!=NULL)//或该类型属性的类似NULL的值{/一些行动/}

  2. 你不能弄清楚为什么这个属性是空的。首先要检查的是能见度。

在我的例子中,函数是另一个类

中的静态方法

检查一下这个类在你调用静态方法的代码区域是否可见