7

我想问一下我对可移植类库的疑问。我正在开发一个 DAL 层,我正在为我的业务对象使用 Portable 项目,该项目的目标是 .Net Framework 4.03 及更高版本,SilverLight 4以及更高版本的 Windows Store Apps 和 .Net。

我想IValidatableObject在我的每个业务对象上实现接口,但即使System.ComponentModel.DataAnnotations该项目所针对的框架可用,我也无法访问IValidatableObject接口,在 .net 可移植框架上不可用,MetadataType属性也不存在. 有什么解决方案可以实现这种方法吗?

4

2 回答 2

6

这可能不是一个简单的解决方案。您可以在具有相同功能的可移植类库中创建自己的接口。但是,这将是一个不同的接口,因此使用 DataAnnotations 的其他框架(我认为是 ASP.NET MVC 和实体框架)不会使用您的版本。

为了解决这个问题,您可以创建一个 PCL,其接口名称和 API 与不同平台上存在的完全相同。然后使用完全相同的程序集标识(名称、版本和强名称密钥)为 .NET 4.0.3、SL4 和 Windows Store 创建类库,并在这些程序集中放置一个[assembly:TypeForwardedToAttribute(typeof(IValidatableObject))]属性。

然后,您的 PCL 可以通过接口引用 PCL 库,并且在使用 PCL 的任何应用程序中,引用该平台的类型转发程序集,这会将对该接口的 PCL 版本的引用重定向到平台。

于 2013-04-16T20:40:13.833 回答
1

这是丹尼尔描述的解决方案的更长描述:http: //log.paulbetts.org/the-bait-and-switch-pcl-trick/

于 2014-11-11T20:51:23.980 回答