是否有任何方法我可以实现IValidatableObject上可移植类库项目



我想问一个关于便携式类库的疑问。我正在开发一个DAL层,我正在为我的业务对象使用便携式项目,这个项目的目标是。net框架4.03及更高版本,SilverLight 4及更高版本和。net Windows商店应用程序。

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

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

要解决这个问题,您可以创建一个PCL,其接口的名称和api与存在于不同平台上的名称和api完全相同。然后为。net 4.0.3, SL4和Windows Store创建具有完全相同的程序集标识(名称,版本和强名称键)的类库,并在这些程序集中添加[assembly:TypeForwardedToAttribute(typeof(IValidatableObject))]属性。

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

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

最新更新