我在使用Activator类来访问程序集中的资源,否则我会创建一个循环引用(依赖注入)。我之前用香草类做过,我需要参考,但我的问题是:我可以使用Activator访问静态类吗?激活器和静态类
绊倒我的部分是激活器返回对象的实例,而静态类没有实例。这可能吗?
我在使用Activator类来访问程序集中的资源,否则我会创建一个循环引用(依赖注入)。我之前用香草类做过,我需要参考,但我的问题是:我可以使用Activator访问静态类吗?激活器和静态类
绊倒我的部分是激活器返回对象的实例,而静态类没有实例。这可能吗?
您不需要激活器来调用该方法。您直接使用MethodInfo.Invoke。第一个参数可以留空。
这不是说静态类没有实例,它只是没有任何公共构造函数。激活使用反射来创建实例,当你使用反射,你可以
如果你的意思是说“资源”打电话给你想要的任何东西,甚至是私有的构造是嵌入在装配事实上的资源,你可以随时手动提取它们(请参阅Assembly.GetManifestResourceStream()
),而不使用静态类(因为您可以使用它们的唯一方式纯粹是反射),所以会出现更多问题。
Spring.NET有一个不错的IResource抽象。
而且不,Activator
不能用于“创建”静态类。
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);
+1的代码示例更多例子,我是懒得关键在 – GvS 2009-03-05 14:15:42