まず、私がやりたいのは、ジェネリッククラスのプロパティの値を取得することです。このプロパティの値は、それを継承するクラスによってオーバーライドされる可能性があります。基本クラスでは、クラスの継承者がオーバーライドして独自のデフォルト値を設定できることをデフォルト値と考えてください。
System.Reflection.FieldInfo.GetValueを使用して、型に直接リフレクションを使用しようとしましたが、これはジェネリック型のクラスでは機能しません。したがって、値が何であるかを確認できるように、クラスをインスタンス化する必要があると思います。
ビン内のDLLを読み取り、Reflectionを使用してインターフェイスから継承するタイプを見つけることにより、取得した「タイプ」。
.NET4.5を使用しています
これは、私が行う必要があることを正確に説明しているように見えるドキュメントです http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx
このドキュメントで私が見ることができる唯一の違いは、型を取得する方法です。ビンで型を調べ、単にtypeof()と呼びました。型は非常に複雑であるため、これはおそらく不一致である可能性がありますが、わかりません。何が欠けているか(もしあれば)
foreach (var item in types)
{
var ts = item.GetField("DefaultTimeToExpire");
Type[] typeArguments = item.GetGenericArguments();
if (ts != null)
{
var t = item.MakeGenericType(typeArguments);
var obj = Activator.CreateInstance(t);
var timespan = obj.DefaultTimeToExpire;
subscriberInfos.Add(new Tuple<string, Type, TimeSpan>(item.Name, item, timespan));
}
}
GetFieldを呼び出して、フィールドが「DefaultTimeToExpire」のアイテムを探しています。これまでのところ、この部分は必要なタイプを見つけるのに適しています。次に、引数タイプの期待される配列を返すGetGenericArgumentsを呼び出します。次に、MakeGenericTypeを呼び出し、最後にインスタンスを作成してエラーメッセージを表示します
Type.ContainsGenericParametersがtrueであるため、BusinessLogic.TestSubscriberXXX`1[メッセージ]のインスタンスを作成できません。」
これはまさに私がやるべきことのように見えます。ありがとう