更新:私の「問題」は、リフレクションを使用していたクラスについての悪い仮定によるものでした。以下の私の質問は無意味です。ただし、コード スニペットが役立つ場合に備えて、ここに残しておきます。
リフレクションを使用して、別のアセンブリに存在するコンパイル済みクラスからビューモデルを生成しています。コンパイルされたアセンブリから返された型が、インターフェイスの具体的な実装であるクラスではなくインターフェイスを示していることを除いて、ほとんどすべてが機能しています。
たとえば、コンパイルされたアセンブリでは、次のようなプロパティを定義します。
public List<String> strings { get; set; }
リフレクションを使用して、次のような対応するプロパティ (および完全なクラス) を生成できました。
public ICollection<String> strings { get; set; }
これを行うタイプを取得します(簡潔にするために大幅に省略されています):
Type value = <...some passed in type...>
String types = String.Join(",", value.GetGenericArguments().Select(t => t.Name).ToArray());
String.Format("{0}<{1}>", value.GetGenericTypeDefinition(), types);
Type オブジェクトを使用して、返されたインターフェイスに使用された具体的な実装を特定する方法はありますか? いいえと思いますが、尋ねると思いました。
方法がない場合、より良い提案がない限り、特定のインターフェイスに対して「最も可能性の高い実装」ルックアップを使用することを考えています (つまり、「ICollection」を渡します。それを具体的な「リスト」に変換します)。 ??
これは、T4 テンプレートを使用してコントローラー、ビュー、およびビューモデル (オートマッパーと Kendo UI を使用) を生成するために使用されるため、「完璧な」ソリューションは必ずしも必要ではありません。したがって、クリーンアップするものがいくつかある場合は、それで問題ありません。したがって、私を近づける提案は大歓迎です。