Workaround for C# generic attribute limitation

前端 未结 3 1992
遇见更好的自我
遇见更好的自我 2021-01-07 23:52

As discussed here, C# doesn\'t support generic attribute declaration. So, I\'m not allowed to do something like:

[Audit (UserAction.Update)]
publ         


        
3条回答
  •  遥遥无期
    2021-01-08 00:13

    You could use reflection to load by id:

    public class AuditAttribute : Attribute
    {
        public AuditAttribute(Type t)
        {
            this.Type = t;
        }
    
        public  Type Type { get; set; }
    
        public void DoSomething()
        {
            //type is not Entity
            if (!typeof(Entity).IsAssignableFrom(Type))
                throw new Exception();
    
            int _id;
    
            IRepository myRepository = new Repository();
            MethodInfo loadByIdMethod =  myRepository.GetType().GetMethod("LoadById");
            MethodInfo methodWithTypeArgument = loadByIdMethod.MakeGenericMethod(this.Type);
            Entity myEntity = (Entity)methodWithTypeArgument.Invoke(myRepository, new object[] { _id });
        }
    }
    

提交回复
热议问题