3 Stimmen

Verwenden Sie den String-Wert, um eine neue Instanz zu erstellen

Ich habe ein paar Kurse: SomeClass1, SomeClass2.

Wie kann ich eine neue Instanz einer dieser Klassen erstellen, indem ich den Klassennamen aus einer Zeichenfolge verwende?

Normalerweise würde ich das tun:

var someClass1 = new SomeClass1();

Wie kann ich diese Instanz aus der folgenden erstellen:

var className = "SomeClass1";

Ich nehme an, ich sollte Type.GetType() oder etwas verwenden, aber ich kann es nicht herausfinden.

Merci.

4voto

Pierreten Punkte 9488
Assembly assembly = Assembly.LoadFrom("SomeDll.dll");    
var myinstance = assembly.CreateInstance("SomeNamespace.SomeClass1");

2voto

Chris Schmich Punkte 28452

Zuerst müssen Sie den Typ durch Reflexion und dann können Sie es mit dem Befehl Activator .

Um den Typ zu erhalten, müssen Sie zunächst herausfinden, in welcher Baugruppe er sich befindet. Für die aktuelle Assembly, in der Ihr Code ausgeführt wird, siehe Assembly.GetExecutingAssembly() . Für alle in Ihrer aktuellen AppDomain geladenen Assemblies, siehe AppDomain.CurrentDomain.GetAssemblies() . Andernfalls, siehe Assembly.LoadFrom .

Wenn Sie einen Klassennamen, aber keinen Namespace haben, können Sie die Typen in Ihrer Assembly durch Assembly.GetTypes() .

Erstellen Sie schließlich den Typ mit Activator.CreateInstance .

using System;
using System.Linq;
using System.Reflection;

namespace ReflectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Assembly thisAssembly = Assembly.GetExecutingAssembly();
            Type typeToCreate = thisAssembly.GetTypes().Where(t => t.Name == "Program").First();

            object myProgram = Activator.CreateInstance(typeToCreate);

            Console.WriteLine(myProgram.ToString());
        }
    }
}

0voto

Mohanavel Punkte 1715

Warum nicht Dependency Injection Frameworks? Diese Arten von Sachen sind stark von Abhängigkeit Injektion Framework wie Sprint.Net, Structure Map, NInject..... behandelt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X