C# 如何从应用程序域中所有加载的程序集中获取所有静态类,并使用反射调用静态方法
我的要求如下,这可能吗?如果是,有人能告诉我这方面的资源吗C# 如何从应用程序域中所有加载的程序集中获取所有静态类,并使用反射调用静态方法,c#,appdomain,system.reflection,C#,Appdomain,System.reflection,我的要求如下,这可能吗?如果是,有人能告诉我这方面的资源吗 从中获取以单词“static”结尾的所有程序集 应用程序域 获取以单词“cache”结尾的静态类 从从步骤1检索的程序集 从类中执行名为“invalidate”的静态方法 从步骤2中检索 试试这个: foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { if (asm.GetName().Name.EndsWith("static")) {
foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
{
if (asm.GetName().Name.EndsWith("static"))
{
foreach(Type type in asm.GetTypes())
{
if (type.Name.EndsWith("cache"))
{
MethodInfo method = type.GetMethod("invalidate", BindingFlags.Static | BindingFlags.Public, null, Type.EmptyTypes, null);
if (method != null)
method.Invoke(null, null);
}
}
}
}
或者。。。如果您更喜欢LINQ:
foreach(MethodInfo method in
AppDomain.CurrentDomain
.GetAssemblies().Where(asm => asm.GetName().Name.EndsWith("static"))
.SelectMany(asm => asm.GetTypes().Where(type => type.Name.EndsWith("cache"))
.Select(type => type.GetMethod("invalidate", BindingFlags.Static | BindingFlags.Public, null, Type.EmptyTypes, null)).Where(method => method != null)))
method.Invoke(null, null);
你想解决什么问题?这听起来对我不合适。为什么不能在代码中直接调用这些方法呢。你为什么需要反思?这是插件模型吗?解决此类问题的更好方法通常是要求对象集中注册自己,或者(如果必须有静态类)应用自定义属性并使用
attribute.GetCustomAttribute()
筛选具有此属性的类型。按名称选择要脆弱得多。当然,这只有在您控制有问题的代码时才可能。