有什么办法可以在Portable Class Library Project上实现IValidatableObject吗?

时间:2013-04-15 19:57:50

标签: portable-class-library

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

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