2016-07-21 7 views
0

インターフェイスの名前はです.IServiceですが、C#でリフレクションでインターフェイスを検索しようとしているときに、何らかの理由でName.EndsWithでリフレクションを使用してC#でインターフェイスを見つけることができません

enter image description here

実際のインタフェースが

のようなものです:インタフェース名がILDASMのために添付のスクリーンショットを見てください

Iservice'1に変更します210

public interface IService<TOutput> where TOutput : class, new() { Task<List<TOutput>> GetAllAsync(dynamic inputParameter); } 

コードインタフェースを見つける: builder.RegisterAssemblyTypes(Assembly.Load( "サービス")) .Where(トン=> t.Name.EndsWith( "本サービス"))

ここでそれが失敗しましたIServiceはいくつかの異なる名前を持っていて、定義されている名前であるため、Serviceを見つけることができます。

名前がこのように見える理由と解決方法を教えてください。

答えて

2

IServiceは一般的です。つまり、IService<T>です。 MSILにコンパイルするとき、C#ジェネリックスはあなたが気づいたように名前が変更されています。

.EndsWithではなく、.Containsを使用してサービスを非汎用にすることができます。

+0

あなたがこれを見つけた投稿はありますか? – Dreamweaver

+1

私はドキュメンテーションのリンクを手元に置いていませんが、あなた自身がリフレクションを使ってこれを簡単に確認できます。 'typeof(List ).Name ==" List \ '1" ' – recursive

+0

はい私はちょうどそれを試しました....ありがとう..それはかなり長い間私を悩ましていた.. :) – Dreamweaver

関連する問題