Laden...

CreateInstance-Methode benutzen, ohne den vollqualifizierten Typnamen zu kennen

Erstellt von Qt21580 vor 14 Jahren Letzter Beitrag vor 14 Jahren 832 Views
Q
Qt21580 Themenstarter:in
204 Beiträge seit 2005
vor 14 Jahren
CreateInstance-Methode benutzen, ohne den vollqualifizierten Typnamen zu kennen

Hi Leute,

ich habe ein riesen Problem mit der Activator.CreateInstance Methode. Ich möchte gerne ein Steuerelement das als String in einer Datenbank vorliegt dynamisch erzeugen, nur funktioniert das bei mir leider nicht so wie ich mir das gedacht habe.

Habe folgendes schon versucht ->


object o = Activator.CreateInstance("System.Windows.Forms", "System.Windows.Forms.MenuStrip");

Da bekomme ich folgende Fehlermeldung:
Die Datei oder Assembly "System.Windows.Forms" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.


Type t = Type.GetType ("System.Windows.Forms.TextBox");

Da bekomme ich null zurück.


object o = Activator.CreateInstance ("System.Windows.Forms,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089", "System.Windows.Forms.MenuStrip");

Das ist das einzige was funktioniert, aber ich kann doch nicht von jeden Steuerelement den PublicKeyToken oder die Version kennen.
Es muß doch eine Möglichkeit geben um mit dem vollen Namen des Controls dieses zu erzeugen.

Kann mir da jemand helfen.

Bin für jede Hilfe dankbar?????????????????????????????

C
52 Beiträge seit 2010
vor 14 Jahren

Ohne FQN wird das nichts.
Du könntest aber einfach durch die Assemblies deiner AppDomain iterieren und dir daraus den Fullname ziehen.


 
string controlString = "System.Windows.Forms.TextBox";

 foreach(Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
 {
    Type t = assembly.GetType(controlString);

     if(  t != null )
     {
        object handle = Activator.CreateInstance(assembly.FullName, controlString );
                  //...
      }
}

888 Beiträge seit 2007
vor 14 Jahren

Du musst in der DB mehr abspeichern als den Typ, sondern den AssemblyQualifiedName.

Also:


string type = Type.GetType("System.Windows.Forms.TextBox").AssemblyQualifiedName
Type t = Type.GetType(type);

M
1.439 Beiträge seit 2005
vor 14 Jahren

oder du suchst selbst nach der Assembly =>AppDomain.AssemblyResolve

Q
Qt21580 Themenstarter:in
204 Beiträge seit 2005
vor 14 Jahren

Danke für die Antworten,

Das von Joetempes funktioniert bei mir leider nicht,
ich mach das ganze mit dem iterieren das haut hin.

Danke nochmals