Domanda

Sto lanciando l'idea di utilizzare la classe Activator per ottenere l'accesso alle risorse in un assembly per il quale altrimenti creerei un riferimento circolare (Iniezione delle dipendenze). L'ho già fatto con classi vanilla a cui avevo bisogno di un riferimento, ma la mia domanda è: posso usare Activator per accedere a una classe statica?

La parte che mi ha fatto scattare è che l'attivatore ti restituisce una istanza dell'oggetto, mentre una classe statica non ha istanza. È possibile?

È stato utile?

Soluzione

Non è necessario l'attivatore per chiamare il metodo. Si utilizza MethodInfo.Invoke direttamente. Il primo parametro può essere lasciato nullo.

Altri suggerimenti

GvS è corretto - ecco un esempio dell'uso:

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"; }
}

Un altro esempio usando MethodInfo.Invoke

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

Non è che la classe statica non abbia istanza, è solo che non ha costruttori pubblici. Activator utilizza la riflessione per creare istanze e quando usi la riflessione puoi chiamare tutto quello che vuoi, anche i costruttori privati ??

Se cosa intendi dicendo " risorse " sono infatti risorse incorporate nell'assembly, puoi sempre estrarle manualmente (vedi Assembly.GetManifestResourceStream () ), senza usare le classi statiche (ci saranno più problemi con quelle poiché l'unico modo che puoi usare loro è puramente riflessivo).

Spring.NET ha una bella IResource .

E no, Activator non può essere utilizzato per " creare " classi statiche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top