1

WSA、NET45、およびWP8を対象とするポータブルクラスライブラリがあり、SL5も対象にしたいと思います。ばかげているのは、ライブラリコードの99%がSL準拠であるということですが、リフレクションAPIを呼び出して型のプロパティまたはフィールドを取得する場所がいくつかあります。

var fields = myType.GetTypeInfo().DeclaredFields;

残念ながら、GetTypeInfoはSL5で使用できないため、上記のコードはコンパイルされません。だから私は基本的にそこにオプションがあります:

  1. PCLからSL5をターゲットにしないでください。そのため、Silverlight用に別のライブラリを保持する必要があります。
  2. リフレクションを使用するPCLコードから抽出するため、PCLは開始時にこの依存関係を解決する必要があります。
  3. PCLが使用可能なメソッドを検出し、適切なメソッドを呼び出すことができるように、実行時にスマートなことを実行します。

オプション1は問題ありませんが、重複したライブラリを維持する代わりの方法を見つけたいと思います。オプション2は、機能の大部分を抽出する必要がある場合は問題ないため、ブートストラッパーを導入する価値があります。コンパイルされない数行の場合、DI/IoCをドラッグするのはばかげています。

ですから、可能かどうかを明確に理解せずに、オプション3について考えています。リフレクションは私の友達ですが、私が克服しようとしているのはリフレクションAPIの不一致です。

アドバイス/経験の共有は大歓迎です。

4

2 に答える 2

1

コードで遊んだ後、フィールドを取得する古い方法を簡単に使用できることに気づきました。

var fields = myType.GetFields(BindingFlags.Public | BindingFlags.Static);

リフレクション API の変更により、この構文は PCL では使用できないという印象を受けましたが、実際には逆でした。この構文を使用すると、.NET 4.0.3、.NET 4.5、.NET for WSA、WP8、および SL5 の両方をターゲットにできます。 .

于 2013-02-03T17:50:08.927 に答える
-1

これはどう?

Reflection.Assembly = Reflection.IntrospectionExtensions.GetTypeInfo(GetType(*anyTypeInAssembly*)).Assembly
于 2015-04-13T07:36:07.370 に答える