web-dev-qa-db-ja.com

C#.NET COREカスタム属性の値を取得する方法は?

次のように定義されたカスタム属性クラスがあります。

[AttributeUsage(AttributeTargets.Property, Inherited = false)]
internal class EncryptedAttribute : System.Attribute
{
    private bool _encrypted;
    public EncryptedAttribute(bool encrypted)
    {
        _encrypted = encrypted;
    }

    public virtual bool Encrypted
    {
        get
        {
            return _encrypted;
        }
    }
}

上記の属性を別のクラスに次のように適用しました。

public class KeyVaultConfiguration
{
    [Encrypted(true)]
    public string AuthClientId { get; set; } = "";

    public string AuthClientCertThumbprint { get; set; } = "";
}

プロパティAuthClientIdでEncrypted = Trueの値を取得するにはどうすればよいですか?

var config = new KeyVaultConfiguration();

// var authClientIdIsEncrypted = ??

.NET Frameworkでは、これは簡単でした。 .NET COREでは、これは可能だと思いますが、ドキュメントがありません。 System.Reflectionを使用する必要があると思いますが、正確にはどのようにしたらよいでしょうか。

6
SamDevx

追加 using System.Reflection次に、 CustomAttributeExtensions.cs の拡張メソッドを使用できます。

このようなものがあなたのために働くはずです:

typeof(<class name>).GetTypeInfo()
      .GetProperty(<property name>).GetCustomAttribute<YourAttribute>();

あなたの場合

typeof(KeyVaultConfiguration).GetTypeInfo()
      .GetProperty("AuthClientId").GetCustomAttribute<EncryptedAttribute>();
15
Set