Instanziieren alle Klassen implementieren eine bestimmte Schnittstelle

Habe ich eine Schnittstelle IExample, und eine Reihe von Klassen ClassOne, ClassTwo und ClassThree alle definierten in verschiedenen namespaces. Werde ich eventuell entfernen, die entweder von den Klassen, oder einen neuen hinzufügen, in einem neuen Ort, in einem späteren Stadium der Entwicklung.

Nun, ich will finden Sie alle Arten implementieren IExample zur Laufzeit, und instanziieren Sie. (Ich weiß vorher, dass keine Klasse die IExample je brauchen wird jeder Konstruktor Argumente, aber ich weiß nicht, wie Sie angeben, dass Sie im code, so ist es mir - nicht der compiler, der weiß, dass...)

Ist das möglich? Wie gehe ich vor, es zu tun?

Update: ich habe jetzt versucht, mehrere Ansätze vorgeschlagen, aber auf allen von Ihnen, die Linie Activator.CreateInstance(type), bekomme ich eine System.MissingMethodException, weil ich "nicht erstellen Sie eine Instanz der Schnittstelle." Das ist mein code:

var tasks = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(a => a.GetTypes())
    .Where(t => typeof(IBootstrapperTask).IsAssignableFrom(t))

    //This line is where it fails
    .Select(t => Activator.CreateInstance(t) as IBootstrapperTask)

    .ToArray();
new AutoMapperBootstrapper(tasks).Initialize();

Ohne die as Klausel sehe ich keine Ausnahme, aber ich bin angesichts einer object[], und ich brauche eine IBootstrapperTask[] für den Konstruktor auf die Letzte Zeile in den Auszug. Ich habe versucht, verschiedene Möglichkeiten, um Sie zu wirken, aber keiner scheint zu funktionieren.

InformationsquelleAutor Tomas Aschan | 2011-02-25
Schreibe einen Kommentar