Frage

Zum Beispiel in eine .NET-app.config Sie könnte

erhalten
<configuration>
   <configSections>
      <section name="MyConfig" type="MyAssembly.MyType, MyAssembly, PublicKeyToken=null" />
   </configSections>
   ...
</configuration>

Die Signatur in der Art Teil scheint in einer Vielzahl von .NET Orten standardisiert zu werden, aber ich habe keine Ahnung, wie dies zu tun in meinem eigenen Programm. Ich habe gebrauchte System.Activator in meinen Programmen, aber das fühlt sich an wie ich bin duplizieren Arbeit, dass .NET bereits der Fall ist.

Bei der Programmierung Begriffen wie kann ich dies tun:

void Main()
{
   object instance = CreateInstance("MyAssembly.MyType, MyAssembly, PublicKeyToken=null");
   Console.WriteLine(instance.GetType().Name);
}

object CreateInstance(string dotNetTypeSignature)
{
   // Code goes here.
}
War es hilfreich?

Lösung

können Sie rufen die Type.GetType Methode ein Type Objekt zu erhalten mit den angegebenen (Assembly qualifiziert) Namen.

können Sie rufen die Activator.CreateInstance Methode eine Instanz eines Typs erzeugen. (Unter der Annahme, dass der Typ einen öffentlichen Standardkonstruktor hat, oder dass Sie wissen, was Konstruktorargumente es braucht).

Zum Beispiel:

Activator.CreateInstance(Type.GetType(name));

Andere Tipps

Diese Abschnitte sind in der Regel erstellt / zugegriffen mit der Visual Studio-Einstellungen Designern.

In der Lösung Explorer Blick unter Einstellungen-> Settings.settings oder per Rechtsklick auf das Projekt Namen-> Einstellungen-> Einstellungen.

Der vollständige Typname ist in der Regel zu tun „spät“ Bindung an einen bestimmten Typ verwendet. In der Konfigurationsdatei Beispiel Sie, die tatsächliche Konfigurations Abschnittsart haben wurde auf der CLR Kompilierzeit nicht bekannt, so dass die ConfigurationManager der tatsächliche Typ Form die Config-Datei zu lesen hat und es zur Laufzeit isntantiate. Dies geschieht, um die System.Activator-Klasse, wie Sie erwähnt haben, und es ist der normale Weg, es über die .NET-Welt zu tun.

Natürlich, wenn der Typ Sie eine Instanz erstellen möchten, ist zum Zeitpunkt der Erstellung bekannt ist, sollten Sie nur die Referenz Assembly, die es enthält und die Verwendung new. Allerdings, wenn Sie möchten Laufzeit Erweiterbarkeit wie die ConfigurationManager implementieren, sollten Sie die Activator verwenden CreateInstance oder CreateInstanceFrom Methoden, die überschreiben, dass Sie die genaue Zeichenfolge übergeben, damit sie ab zu lesen, was auch immer Config Sie verwenden, oder eine Instanz Type, die auch aus dem gleichen String erzeugt werden kann.

Und natürlich ist da noch die andere Seite, wo jede Implementierung Ihres Erweiterungspunktes der vollständigen Typnamen schreiben muss. Um dies zu tun, können Sie typeof(MyType).FullName oder myInstance.GetType().FullName.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top