PostSharp C # - как реализовать все необходимые поля - PullRequest
0 голосов
/ 17 сентября 2018

PostSharp контракты позволяют легко помечать отдельные поля как обязательные. Но я хочу атрибут класса, который делает все поля класса обязательными. Я предполагаю, что мне придется реализовать собственный аспект для поддержки этого.

Кажется, что это будет обычная необходимость для любого, кто обходит контейнеры данных. Может кто-нибудь направить меня к некоторому коду, который реализует пользовательский аспект «AllFieldsRequired» в PostSharp?

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете реализовать 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;
}
...