Определите, имеет ли интерфейс пользовательский атрибут - PullRequest
0 голосов
/ 09 марта 2019

У меня есть пользовательский атрибут:

public class InterfaceForPartialModelAttribute : Attribute
{
    //...
}

Атрибут применяется к интерфейсу ( не для свойства ).

namespace DAL.Model
{
    [InterfaceForPartialModelAttribute] //<--custom attribute
    public interface IActivity_part
    { 
        string ActivityName { get; set; }
        ActivityTypeEnum ActivityType { get; set; }
        bool IsActivityDetailsCompleted { get; set; }
    }
}

Используя отражения, я хочу просканировать сборку и проверить все интерфейсы, которые имеют мой пользовательский атрибут:

Assembly[] assemblyArray = AppDomain.CurrentDomain.GetAssemblies();
var assTypes = assemblyArray[8].GetTypes(); //the 9th assembly is the one I've applied the attribute... this is irrelevant
string ns = "DAL.Model";
for (int i = 0; i < assTypes.Length; i++)
{
    bool hasDataContractAttribute = assTypes[i].GetCustomAttributes(typeof(InterfaceForPartialModelAttribute), true).Any();

    if (assTypes[i].IsInterface && assTypes[i].Namespace == ns && hasDataContractAttribute == true)
    {
        if (assTypes[i].Name == "IActivity_part")
        {
            Console.WriteLine("type found!");
        }


        Console.WriteLine("zr type: " + assTypes[i].Name);
        Console.WriteLine("zr ns  : " + assTypes[i].Namespace);
        Console.WriteLine("---------------------------------------------");

    }
}

Консоль не печатает никаких результатов, hasDataContractAttribute никогда не верен , как получилось? Кажется, что GetCustomAttributes возвращает атрибуты, которые применяются к свойствам. но я ищу атрибуты, которые применяются к уровню интерфейса. В большинстве онлайн-примеров показано, как получить пользовательские атрибуты путем отражения в атрибутах.

...