2

私のコードでは、次のインターフェースがあります

public interface ILogParser<TParserOptions> { }

リフレクションを介してこのインターフェイスを使用するすべての型を取得し、それらをインスタンス化しようとしています。通常、私は次の行に沿って何かをします:

var parser = (ILogParser)Activator.CreateInstance(parserType)

ただし、ジェネリックを扱っている場合、これは機能しません。これは、キャスト時にジェネリック型を知る必要があり、実装された型ごとに異なる可能性があるためです。

これは可能ですか?

4

1 に答える 1

1

インターフェイスの型でType.MakeGenericTypeを使用して、インターフェイスを実装するオブジェクトの特定のインスタンスを作成できます。

適切な型 (ジェネリック型が指定されている) があれば、Activator.CreateInstance問題なく動作します。

たとえば、上記では、次のように使用できます。

Type interfaceType = typeof(LogParser<>); // Some class that implements ILogParser<T>
// Make the appropriate type - 
// Note: if this is in a generic method, you can use typeof(T)
Type fullType = interfaceType.MakeGenericType( new[] { typeof(Int32) });

object result = Activator.CreateInstance(fullType);
于 2011-09-21T00:05:08.720 に答える