我有一个像这样的静态类:
public static class MyApp
{
public static volatile MultiThreadLogger Logger = new MultiThreadLogger();
}
这样的字符串:
"MyApp.Logger"
如何在知道字符串的情况下获取对象引用?字符串可以与"MyOtherNamespace.Subnamespace.StaticObjA.MemberIwantToAccess"
不同,我不想创建新实例,我想访问静态实例 - 只需要字符串。
可能的?
答案 0 :(得分:3)
Type t = Type.GetType("MyApp");
PropertyInfo p = t.GetProperty("Logger", Reflection.BindingFlags.Public | Reflection.BindingFlags.Static | Reflection.BindingFlags.FlattenHierarchy);
return p.GetValue(null, null);
答案 1 :(得分:2)
public class ClassFactory
{
static Dictionary<string, object> _Instances;
public static object Get(string type)
{
lock (_Instances)
{
object inst;
if (_Instances.TryGetValue(type, out inst)) return inst;
inst = Activator.CreateInstance(Type.GetType(type));
_Instances.Add(type, inst);
return inst;
}
}
}
答案 2 :(得分:0)
如果您正在寻找一个对象(该类的一个实例),您需要在某种工厂中“注册”它,可能是静态字典,然后从那里加载它。
更好的解决方案是考虑IoC容器(http://en.wikipedia.org/wiki/Inversion_of_control)。 IoC容器将处理生命周期管理并返回不同版本以进行测试或应用程序的不同部分。可以在http://weblogs.asp.net/sfeldman/archive/2008/02/14/understanding-ioc-container.aspx找到对它们的一个很好的解释,然后在http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx找到一个清单。