Execute/Reject dotnet core C#中基于海关属性值的函数

Execute/Reject function based on customs attribute value in dotnet core C#

我正在尝试学习 C# dotnet core 中的属性,所以我在下面写了 2 类。

  1. Attribute class:

    using System;
    
    namespace attribute
    {
       // [AttributeUsage(AttributeTargets.Class)]
       [AttributeUsage(AttributeTargets.All)]
       public class MyCustomAttribute : Attribute
       {
           public string SomeProperty { get; set; }
        }
    
    
    //[MyCustom(SomeProperty = "foo bar")]
    public class Foo
    {
        [MyCustom(SomeProperty = "user")]
        internal static void fn()
        {
            Console.WriteLine("hi");
        }
      }
    }
    
  2. Main class:

    using System;
    using System.Reflection;
    
    namespace attribute
    {
        public class Program
        {
            public static int Main(string[] args)
            {
    
                var customAttributes = (MyCustomAttribute[])typeof(Foo).GetTypeInfo().GetCustomAttributes(typeof(MyCustomAttribute), true);
            if (customAttributes.Length > 0)
            {
                var myAttribute = customAttributes[0];
                string value = myAttribute.SomeProperty;
                // TODO: Do something with the value
                Console.WriteLine(value);
                if (value == "bar")
                    Foo.fn();
                else
                    Console.WriteLine("Unauthorized");
            }
            return 0;
        }
      }
    }
    

如果 MyCustomAttribute 中的 SomeProperty 元素等于 bar,我需要执行函数 Foo.fn()。 如果我将它应用到 class level,我的代码可以正常工作,但不适用于 function level

重要提示 我对此很陌生,因此欢迎任何改进我的代码的建议或反馈。谢谢

您的解决方案是找到声明的方法并在该方法中找到属性。

var customAttributes =  (MyCustomAttribute[])((typeof(Foo).GetTypeInfo())
.DeclaredMethods.Where(x => x.Name == "fn")
.FirstOrDefault())
.GetCustomAttributes(typeof(MyCustomAttribute), true);