利用可能な場合、プラットフォームからの実装を使用するポータブル クラス ライブラリを構築しようとしています。たとえば、Lazy<T>
.NET 4.5、Windows ストア アプリ、Windows Phone 8 では利用できますが、Windows Phone 7、Silverlight 4 では利用できません。PCL がLazy<T>
実装されているプラットフォームの 1 つに読み込まれている場合、プラットフォームの実装。プラットフォームで利用できない場合は、独自の実装を使用したいと考えています。Microsoft BCL がやっているので可能のようですが、実装方法がわかりません。
TypeForwardedToAttribute
を使用することで、PCL をリダイレクトしてプラットフォームからの実装を使用できることを読みました。この結果を達成するために Visual Studio プロジェクトを構成する方法がよくわかりません。CoreLibが私のライブラリで、ShimLibに私の実装が含まれてLazy<T>
いる場合 TypeForwardedToAttribute はどこに追加すればよいですか? この属性には実際の Type 参照が必要ですがtypeof(System.Lazy<>)
、PCL で Windows Phone 7 がターゲットになっている場合は機能しません。Windows Phone 7 を削除すると、CoreLib から ShimLib への参照を追加できなくなります。どうすればこれを処理できますか?
はい、Lazy<T>
実装が非常に簡単であることはわかっていますが、これは単なる例であり、私の実際の状況は、実装がそれほど簡単ではないさらに多くのクラスに当てはまります。