我正在折腾使用 Activator 类来访问程序集中的资源的想法,否则我会为(依赖注入)创建循环引用。我以前使用需要引用的 vanilla 类来完成它,但我的问题是:我可以使用 Activator 来访问静态类吗?
让我失望的部分是激活器返回给你一个对象的实例,而静态类没有实例。这可能吗?
我正在折腾使用 Activator 类来访问程序集中的资源的想法,否则我会为(依赖注入)创建循环引用。我以前使用需要引用的 vanilla 类来完成它,但我的问题是:我可以使用 Activator 来访问静态类吗?
让我失望的部分是激活器返回给你一个对象的实例,而静态类没有实例。这可能吗?
您不需要激活器来调用该方法。您直接使用MethodInfo.Invoke。第一个参数可以为空。
GvS 是正确的 - 这是一个用法示例:
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"; }
}
另一个使用 MethodInfo.Invoke 的示例
Type myStaticClassType = Type.GetType("MyStaticClassNameSpace",true);
object[] myStaticMethodArguments = {object1,object2...};
MethodInfo myStaticMethodInfo = myStaticClassType.GetMethod("YourMethod");
var myStaticMethodResult = myStaticMethodInfo.Invoke(null,myStaticMethodArguments);
不是静态类没有实例,只是它没有任何公共构造函数。Activator 使用反射来创建实例,当你使用反射时你可以调用任何你想要的东西,甚至是私有构造函数
如果您所说的“资源”实际上是嵌入在程序集中的资源,那么您总是可以手动提取它们(请参阅 参考资料Assembly.GetManifestResourceStream()
),而不使用静态类(这些会出现更多问题,因为您可以使用它们的唯一方法是纯粹带反射)。
Spring.NET 有一个很好的IResource抽象。
不,Activator
不能用于“创建”静态类。