Frage

Ich werfe um die Idee der Activator-Klasse, um mit Zugriff auf Ressourcen in einer Baugruppe zu erhalten, die ich sonst einen zirkulären Verweis für (Dependency Injection) schaffen würde. Ich habe es getan, bevor mit Vanille-Klassen, die ich eine Referenz benötigt, aber meine Frage ist: kann ich den Activator verwenden, um Zugriff auf eine statische Klasse zu erhalten

Der Teil, den ich ist los Auslösung ist, dass der Activator Sie gibt eine Instanz des Objekts, während eine statische Klasse keine Instanz hat. Ist das möglich?

War es hilfreich?

Lösung

Sie müssen nicht den Activator die Methode aufzurufen. Sie verwenden MethodInfo.Invoke direkt. Der erste Parameter null gelassen werden kann.

Andere Tipps

GvS ist richtig - hier ist ein Beispiel für die Nutzung:

using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        Type type = Type.GetType("Foo");
        MethodInfo info = type.GetMethod("Bar");

        Console.WriteLine(info.Invoke(null, null));
    }
}

static class Foo
{
    public static String Bar() { return "Bar"; }
}

Ein weiteres Beispiel mit MethodInfo.Invoke

Type myStaticClassType = Type.GetType("MyStaticClassNameSpace",true);
object[] myStaticMethodArguments = {object1,object2...};
MethodInfo myStaticMethodInfo = myStaticClassType.GetMethod("YourMethod");
var myStaticMethodResult = myStaticMethodInfo.Invoke(null,myStaticMethodArguments);

Es ist nicht, dass statische Klasse keine Instanz hat, es ist nur es noch keine öffentlichen Konstruktoren hat. Activator verwendet Reflektion Instanzen zu erstellen, und wenn Sie Reflektion verwenden, können Sie alles, was Sie wollen, nennen, auch private Konstruktoren

Wenn das, was meinen Sie mit den Worten „Ressourcen“ in der Tat Ressourcen ist in der Assembly eingebettet, Sie immer sie (siehe Assembly.GetManifestResourceStream()) manuell extrahieren, ohne statische Klassen (es wird, da der einzige Weg, mit denen mehr Probleme möglich verwenden sie ist rein mit Reflexion).

Spring.NET hat eine schöne IResource Abstraktion.

Und nein, Activator nicht verwendet werden kann, um statische Klassen „zu schaffen“.

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