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是的,您是对的。从(模糊的)记忆中执行此操作。谢谢,谢谢,这正是我想要的!