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