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

PostSharp C# - How to Implement All Fields Required

PostSharp 合同可以轻松地将各个字段标记为必填。但我想要一个 class 属性,它使所有 class 字段都成为必填项。我猜我必须实现一个自定义方面来支持这一点。

这似乎是任何传递数据容器的人的普遍需求。谁能指导我一些在 PostSharp 中实现自定义 "AllFieldsRequired" 方面的代码?

您可以实施 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;
}