У меня есть пользовательский атрибут:
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 возвращает атрибуты, которые применяются к свойствам. но я ищу атрибуты, которые применяются к уровню интерфейса. В большинстве онлайн-примеров показано, как получить пользовательские атрибуты путем отражения в атрибутах.