| 

.NET C# Java Javascript Exception

7
Wie finde ich in der Attributeklasse den Typ der Klasse raus, die mein Attribute verwendet?

Eine Idee wäre, den Type im Attribute mitzugeben, jedoch finde ich das ein wenig "hässlich".
[Aggregate(typeof(Customer))]
public class Customer
{
}

[AttributeUsage(AttributeTargets.Class)]
public class AggregateAttribute : Attribute
{
Type _type;
public AggregateAttribute(Type type)
{
_type = type;
}
}


Gibt es bessere, schönere Möglichkeiten?
18.11.2011
Mario Priebe 6,0k 3 9
2 Antworten
3
Hallo Mario,
iteriere doch per Reflection durch das Typesystem (bzw. den gewünschten/notwendigen Teil davon) und prüfe ob der Typ das Attribut hat,das wäre vom Ansatz her andersrum.
Sag Bescheid wenn Du Code für diesen Ansatz benötigst.

-
18.11.2011
Jorgen Schumann 1,6k 1 9
Genau so werde ich das machen, ich werde zum Start mir die Klassen entsprechend der Attribute ermitteln, Danke dir : )
Mario Priebe 20.11.2011
2
Hallo Mario,

mit normalen Bordmitteln ist das nicht möglich. Ich sehe drei alternative Ansätze:

  • Du machst es mit einem Attribut andersrum (so wie Jorgen vorschlägt), hast aber bei der Prüfung jedes Mal den Reflection-Overhead
  • Statt Attribut verwendest Du ein (leeres) Marker-Interface und prüfst den Typ (das geht mit einer einzigen MSIL Instruktion, d.h. Overhead minimal)
    interface IAggregate {}

    if(myObject is IAggregate)
    //...

  • Du besorgst Dir Postsharp und machst aus Deinem Attribut einen Aspect. Dann kommst Du an die gewünschte Typinformation ran (und kannst noch viele andere nette Dinge damit anstellen :). Ich kenn jetzt den Hintergrund Deiner Frage nicht, aber Aggregate und Customer klingt für mich irgendwie nach DDD, vielleicht im Zusammenhang mit IoC... Solltest Du also vorhaben, an irgendeiner anderen (womöglich sogar zentralen Stelle) dieses Attribut auszuwerten und darauf zu reagieren, kann ein Aspect Dein Problem IMO sehr sauber kapseln.
    Ist aber allerdings eine 3rd Party Dependency mehr...


Viel Erfolg
Florian
18.11.2011
ffordermaier 8,4k 3 9
+1 für den Scharfsinn (DDD) ;)
Mario Priebe 20.11.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH