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
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.