激活器和静态类

我正在抛弃使用Activator类的想法,以便访问程序集中的资源,否则我将为(dependency injection)创建循环引用。 我之前已经完成了我需要引用的vanilla类,但我的问题是:我可以使用Activator来访问静态类吗?

绊倒我的那部分是Activator返回给你一个对象的实例 ,而一个静态类没有实例。 这可能吗?

您不需要Activator来调用该方法。 您直接使用MethodInfo.Invoke 。 第一个参数可以保留为null。

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使用reflection来创建实例,当您使用reflection时,您可以调用任何您想要的东西,甚至是私有构造函数

如果你说“资源”的意思实际上是嵌入在程序集中的资源,你总是可以手动提取它们(参见Assembly.GetManifestResourceStream() ),而不使用静态类(因为你唯一的方法会有更多的问题)可以使用它们纯粹是用reflection)。

Spring.NET有一个很好的IResource抽象。

不, Activator不能用于“创建”静态类。