Pregunta

Estoy compartiendo la idea de utilizar la clase Activator para obtener acceso a los recursos en un ensamblaje para el que, de lo contrario, crearía una referencia circular (inyección de dependencia). Lo he hecho antes con clases de vainilla a las que necesitaba una referencia, pero mi pregunta es: ¿puedo usar el activador para obtener acceso a una clase estática?

La parte que me está faltando es que el activador te devuelve una instancia del objeto, mientras que una clase estática no tiene instancia. ¿Es esto posible?

¿Fue útil?

Solución

No necesita el activador para llamar al método. Utiliza MethodInfo.Invoke directamente. El primer parámetro se puede dejar nulo.

Otros consejos

GvS es correcto: aquí hay un ejemplo del 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 ejemplo más usando MethodInfo.Invoke

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

No es que la clase estática no tenga instancia, simplemente no tiene ningún constructor público. Activator utiliza la reflexión para crear instancias, y cuando utiliza la reflexión puede llamar a cualquier cosa que desee, incluso a constructores privados

Si lo que quieres decir con " recursos " de hecho, los recursos incorporados en el ensamblaje siempre se pueden extraer manualmente (ver Assembly.GetManifestResourceStream () ), sin usar clases estáticas (habrá más problemas con ellos, ya que es la única forma en que puede usar ellos es puramente con reflexión).

Spring.NET tiene un buen resumen IResource .

Y no, Activator no se puede utilizar para " crear " clases estáticas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top