Laden...

Custom Attribute innerhalb der Klasse auslesen

Erstellt von b0b0nr1 vor 11 Jahren Letzter Beitrag vor 11 Jahren 682 Views
B
b0b0nr1 Themenstarter:in
92 Beiträge seit 2011
vor 11 Jahren
Custom Attribute innerhalb der Klasse auslesen

Hi,

ich steh vor einem Problem und hab gehofft mir kann jemand helfen, google und co ergaben leider keine Lösungen für mich.

Ich hab eine Klasse, welche später als Collection genutzt wird, abgeleitet von einem IENumerable.

Innerhalb dieser Klasse hab ich die Funktion "ReturnLangLine".

Der Sinn dahinter ist, dass ich anhand von Attributen die darauf gesetzt sind herausfinden möchte Welcher LangCode und Welches Package genutzt werden soll.

Sind auf der Datenbank diese nicht vorhanden werden Sie ahand der Collection erstellt.

Ich habe erstmal nur den PackageName als Attribut:


    [System.AttributeUsage(System.AttributeTargets.All)]
    public class LanguagePackage : System.Attribute
    { 
        private string name;
        public LanguagePackage(string Code)
        {
            

            name = Code;
            
        }
        public string Name
        {
        get{ return this.name; }
        
        }
    
    }

Außerdem möchte ich im Constructor meiner Klasse das Attribut schon auslesen:



 public class LanguageDefaultValues : IEnumerable
    {
        private Dictionary<string, string> myCol = new Dictionary<string, string>();
        private LanguagePackage[] packages = null;
        private LanguageCode[] codes = null;
        private object[] sobjData = null;
        private Type baseType = null;
        private PropertyInfo[] props = null;
        public string Package = "Root";
        public string LangCode = "__USER__";

        public LanguageDefaultValues()
        {
          
            Type t = this.GetType();

            MemberInfo MI = typeof(LanguageDefaults.LanguageDefaultValues);

            sobjData = MI.GetCustomAttributes(true);


            packages = (LanguagePackage[])t.GetCustomAttributes(typeof(LanguagePackage), true);
            codes = (LanguageCode[])t.GetCustomAttributes(typeof(LanguageCode), true);
            if (sobjData.Length >= 1) { }
           
        }

......


Um so auf den Packagetype und den Langcode zu kommen.

In der Praxis sieht das Ganze dann so aus:



 public static class Test
    {
        
        [LanguagePackage("TESTPKG")]
        public static LanguageDefaultValues TEST_LANG_NAME= new LanguageDefaultValues(){
                                                            { "de-DE", "TEST-DEUTSCH" },
                                                            { "en-US", "TEST_ENGLISCH" }};


}



Jedoch gibt er immer aus dass packages = (LanguagePackage[])t.GetCustomAttributes(typeof(LanguagePackage), true);

leer ist.

Ich finde einfach den Fehler nicht. Kann mir wer helfen?

VG

b0b0

2.891 Beiträge seit 2004
vor 11 Jahren

Jedoch gibt er immer aus dass packages = (LanguagePackage[])t.GetCustomAttributes(typeof(LanguagePackage), true); leer ist.

Da t ja dein Type-Objekt ist, ist das Ergebnis logischerweise auch leer - denn der Typ hat ja auch kein solches Attribut. Die Attribute, die du suchst, gehören zum MemberInfo. (Du hast das Attribut für das Feld definiert, nicht für die Klasse.)
Also musst du auch mi.GetCustomAttributes(...) aufrufen, um die gewünschten Attribute zu erhalten.

B
b0b0nr1 Themenstarter:in
92 Beiträge seit 2011
vor 11 Jahren

Ah, ok... also muss ich mir die FieldInfo vorher holen richtig?

2.891 Beiträge seit 2004
vor 11 Jahren

FieldInfo vorher holen richtig?

Ja.