c#通过字符串访问对象实例
我有一个这样的静态类:c#通过字符串访问对象实例,c#,reflection,C#,Reflection,我有一个这样的静态类: public static class MyApp { public static volatile MultiThreadLogger Logger = new MultiThreadLogger(); } "MyApp.Logger" 还有这样的字符串: public static class MyApp { public static volatile MultiThreadLogger Logger = new MultiThreadLogge
public static class MyApp
{
public static volatile MultiThreadLogger Logger = new MultiThreadLogger();
}
"MyApp.Logger"
还有这样的字符串:
public static class MyApp
{
public static volatile MultiThreadLogger Logger = new MultiThreadLogger();
}
"MyApp.Logger"
我如何在知道字符串的情况下获得对象引用?字符串可以是不同的,如“MyOtherNamespace.Subnamespace.StaticObjA.MemberIwantToAccess”
,我不想创建新实例,我想访问静态实例-仅通过字符串
可能吗?公共类类工厂
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;
}
}
}
{
静态字典实例;
公共静态对象Get(字符串类型)
{
锁定(_个实例)
{
对象指令;
if(_Instances.TryGetValue(type,out inst))返回inst;
inst=Activator.CreateInstance(Type.GetType(Type));
_实例。添加(类型、说明);
返回仪表;
}
}
}
公共类类工厂
{
静态字典实例;
公共静态对象Get(字符串类型)
{
锁定(_个实例)
{
对象指令;
if(_Instances.TryGetValue(type,out inst))返回inst;
inst=Activator.CreateInstance(Type.GetType(Type));
_实例。添加(类型、说明);
返回仪表;
}
}
}
您正在寻找特定的课程吗?在这种情况下,您可以添加一个属性,然后通过使用反射、MEF或类似的方法迭代AssemlManager中定义的类,直到找到正确的类为止 如果要查找对象(类的实例),则需要在某种工厂(可能是静态字典)中“注册”它,然后从那里加载它
一个更好的解决方案是考虑IOC容器(http://en.wikipedia.org/wiki/Inversion_of_control). IoC容器将处理生命周期管理,并返回用于测试的不同版本或应用程序的不同部分。有关这些问题的详细说明,请访问,然后访问
你在找一门特殊的课程吗?在这种情况下,您可以添加一个属性,然后通过使用反射、MEF或类似的方法迭代AssemlManager中定义的类,直到找到正确的类为止 如果要查找对象(类的实例),则需要在某种工厂(可能是静态字典)中“注册”它,然后从那里加载它一个更好的解决方案是考虑IOC容器(http://en.wikipedia.org/wiki/Inversion_of_control). IoC容器将处理生命周期管理,并返回用于测试的不同版本或应用程序的不同部分。有关这些问题的详细说明,请访问,然后访问
@Marc但是获取一个静态类的实例的目标是什么?即使L.B方法非常好,您仍然需要反射来访问“实例”的方法/属性。。。所以一个基本的Type.GetType()
就足够了,不是吗?你觉得我错过了什么吗?记录“实例化的”静态类?问题是我创建了一个用户控件,你可以将它放在一个页面中,并配置你想像这样显示的对象。
,在服务器页面上,我必须通过字符串访问对象。@Marc但是获取静态类实例的目标是什么?即使L.B方法非常好,您仍然需要反射来访问“实例”的方法/属性。。。所以一个基本的Type.GetType()
就足够了,不是吗?你觉得我错过了什么吗?记录“Instanced”静态类?问题是我创建了一个用户控件,你可以将它放入一个页面中,并配置你想像这样显示的对象,在服务器页面上,我必须通过字符串访问该对象。你看到这个了吗?你看到这个了吗?您可能需要删除BindingFlags.Instance
,尤其是在第一个参数为null的情况下无条件调用GetValue
。@hvd是的,您是对的。从(模糊的)记忆中执行此操作。谢谢,谢谢,这正是我想要的!您可能需要删除BindingFlags.Instance
,尤其是在第一个参数为null的情况下无条件调用GetValue
。@hvd是的,您是对的。从(模糊的)记忆中执行此操作。谢谢,谢谢,这正是我想要的!