我正在尝试构建一个可移植的类库,它在可用时使用来自平台的实现。例如,Lazy<T>
在 .NET 4.5、Windows Store Apps、Windows Phone 8 上可用,但在 Windows Phone 7、Silverlight 4 上不可用。当我的 PCL 加载到具有Lazy<T>
实现的平台之一时,我想使用平台的实现。当它在平台上不可用时,我想使用我自己的实现。这似乎是可能的,因为微软 BCL 正在这样做,但我还没有弄清楚如何实现它。
我已经读过,通过使用TypeForwardedToAttribute
,您可以重定向 PCL 以使用来自平台的实现。我不太确定如何配置我的 Visual Studio 项目以实现此结果。如果CoreLib是我的库,并且ShimLib包含我的Lazy<T>
. 我在哪里添加 TypeForwardedToAttribute?该属性需要一个实际的类型引用typeof(System.Lazy<>)
,当 Windows Phone 7 以 PCL 为目标时,该引用不起作用。如果我删除 Windows Phone 7,那么我无法将 CoreLib 的引用添加到 ShimLib,因为 ShimLib 不支持 CoreLib 支持的所有平台。我该如何处理?
是的,我知道Lazy<T>
它非常容易实现,但这只是一个例子,我的实际情况适用于更多不那么容易实现的类。