1

私はこのような静的クラスを持っています:

public static class MyApp
{
    public static volatile MultiThreadLogger Logger = new MultiThreadLogger();
}

そしてこのような文字列:

"MyApp.Logger"

文字列を知っているだけでオブジェクト参照を取得するにはどうすればよいですか?文字列は次のように異なる場合が"MyOtherNamespace.Subnamespace.StaticObjA.MemberIwantToAccess"あります。新しいインスタンスを作成したくないので、静的インスタンスにアクセスしたいのですが、文字列だけでアクセスできます。

可能?

4

3 に答える 3

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);

http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx

リフレクションで静的プロパティを取得する方法

于 2012-08-31T06:41:09.760 に答える
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;
        }
    }
}
于 2012-08-31T06:38:14.197 に答える
0

特定のクラスをお探しですか?その場合、属性を追加してから、適切なクラスが見つかるまで、リフレクション、MEF、または同様のものを使用して、定義されたクラスをアセンブリ内で反復できます。

オブジェクト (クラスのインスタンス) を探している場合は、何らかのファクトリ (おそらく静的辞書) に「登録」し、そこからロードする必要があります。

より良い解決策は、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 .

于 2012-08-31T06:41:22.940 に答える