CreateChannelメソッドを呼び出すために型が必要なChannelFactoryを使用してWCFをプログラミングしています。例:動的にテンプレート用のジェネリック型を作成する
IProxy proxy = ChannelFactory<IProxy>.CreateChannel(...);
私のケースでは、ルーティングを行っているので、自分のチャネルの工場が使用するタイプがわからない。私はタイプを決定するためにメッセージヘッダを解析することができますが、たとえ私がタイプのインスタンスを持っていても、ChannelFactoryがジェネリックタイプを予期しているものを渡すことができないので、レンガの壁に当たっています。
非常に簡単な言葉で、この問題を修正再表示する別の方法は、私はこのような何かをしようとしてるということでしょう:
string listtype = Console.ReadLine(); // say "System.Int32"
Type t = Type.GetType(listtype);
List<t> myIntegers = new List<>(); // does not compile, expects a "type"
List<typeof(t)> myIntegers = new List<typeof(t)>(); // interesting - type must resolve at compile time?
私はC#の中に活用することができ、このためのアプローチはありますか?あなたはMakeGenericType
string elementTypeName = Console.ReadLine();
Type elementType = Type.GetType(elementTypeName);
Type[] types = new Type[] { elementType };
Type listType = typeof(List<>);
Type genericType = listType.MakeGenericType(types);
IProxy proxy = (IProxy)Activator.CreateInstance(genericType);
だから何をやっていることは、あなたのランタイム駆動タイプを使用したタイプの特殊化を構築し、一般的な「テンプレート」クラスの型定義を取得しているされて探しているものを
[ジェネリッククラスの型パラメータとして渡すアンインスタンス化のSystem.Type]の可能複製(http://stackoverflow.com/questions/266115/pass-an-instantiated-system:それは基本的にこれを行いますタイプのようなタイプのパラメータジェネリッククラスのための) – nawfal