Question

Je me lance à l'idée d'utiliser la classe Activator afin d'obtenir un accès aux ressources d'un assembly pour lequel je créerais autrement une référence circulaire (injection de dépendance). Je l'ai déjà fait avec des classes vanilla pour lesquelles j'avais besoin d'une référence, mais ma question est la suivante: puis-je utiliser Activator pour accéder à une classe statique?

Ce qui me fait trembler, c’est que l’Activator vous renvoie une instance de l’objet, alors qu’une classe statique n’a pas d’instance. Est-ce possible?

Était-ce utile?

La solution

Vous n'avez pas besoin de l'activateur pour appeler la méthode. Vous utilisez directement MethodInfo.Invoke . Le premier paramètre peut être laissé nul.

Autres conseils

GvS est correct - voici un exemple d'utilisation:

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 autre exemple utilisant MethodInfo.Invoke

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

Ce n'est pas que la classe statique n'a pas d'instance, c'est juste qu'elle n'a pas de constructeur public. Activator utilise la réflexion pour créer des instances, et lorsque vous utilisez la réflexion, vous pouvez appeler tout ce que vous voulez, même les constructeurs privés

Si vous voulez dire par "ressources", En fait, il s’agit de ressources incorporées dans l’assemblage, vous pouvez toujours les extraire manuellement (voir Assembly.GetManifestResourceStream () ), sans utiliser de classes statiques (il y aura plus de problèmes avec ces classes eux est purement avec la réflexion).

Spring.NET a une belle IResource .

Et non, Activator ne peut pas être utilisé pour " créer " classes statiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top