Próbuję napisać metodę, która znajduje wszystkie typy w zespole z określonym atrybut niestandardowy. Muszę również być w stanie podać wartość ciągu, aby dopasować się. Ograniczeniem jest to, że chciałbym móc uruchomić to na dowolnej klasie i zwrócić jakąkolwiek wartość.Dynamicznie uzyskać wartość atrybutu klasy od typu
Na przykład: chciałbym wykonywać połączenia tak
Type tTest = TypeFinder.GetTypesWithAttributeValue(Assembly.Load("MyAssembly"), typeof(DiagnosticTestAttribute), "TestName", "EmailTest");
Moja metoda dotąd wygląda następująco:
public static Type GetTypesWithAttributeValue(Assembly aAssembly, Type tAttribute, string sPropertyName, object oValue)
{
object oReturn = null;
foreach (Type type in aAssembly.GetTypes())
{
foreach (object oTemp in type.GetCustomAttributes(tAttribute, true))
{
//if the attribute we are looking for matches
//the value we are looking for, return the current type.
}
}
return typeof(string); //otherwise return a string type
}
Moja Atrybut wygląda następująco:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class DiagnosticTestAttribute : Attribute
{
private string _sTestName = string.Empty;
public string TestName
{
get { return _sTestName; }
}
public DiagnosticTest(string sTestName)
{
_sTestName = sTestName;
}
}
Dla tych, którzy znają wyrażenia, bardzo chciałbym móc zadzwonić li ke:
TypeFinder.GetTypesWithAttributeValue<DiagnosticTestAttribute>(Assembly.Load("MyAssembly"), x=> x.TestName, "EmailTest");
Miejsce, w którym wyrażenie używa mojego rodzaju ogólnego, aby wybrać właściwość, której szukam.
To działało bez zarzutu. Musiałem zmienić montaż, ponieważ nazwałem go innym, ale działa świetnie. Wielkie dzięki. –
jeśli mógłbym dać ci więcej wiary ;-) – Seabizkit