代码之家  ›  专栏  ›  技术社区  ›  JamesHoux

PostSharp C#-如何实现所有必需字段

  •  1
  • JamesHoux  · 技术社区  · 6 年前

    PostSharp合同使得根据需要标记单个字段变得很容易。但是我需要一个class属性,使所有的class字段都是必需的。我猜我必须实现一个自定义方面来支持这一点。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Roman Akberov    6 年前

    你可以实现 PostSharp.Aspects.IAspectProvider :

    public class AllFieldsRequiredAttribute : TypeLevelAspect, IAspectProvider
    {
        IEnumerable<AspectInstance> IAspectProvider.ProvideAspects(object targetElement)
        {
            Type type = (Type)targetElement;
            return type.GetFields().Select(
               m => new AspectInstance(m, new ObjectConstruction(typeof(RequiredAttribute))));
        }
    }
    
    [AllFieldsRequired]
    public class Foo
    {
        public string Bar;
        public object Baz;
    }