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

use*_*999 7 portable-class-library

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

我想IValidatableObject在我的每个业务对象上实现接口,但即使System.ComponentModel.DataAnnotations可用于该项目所针对的框架,我仍然访问IValidatableObject接口,在.net可移植框架上不可用,MetadataType它上面都没有属性.有没有解决方案来实现这种方法?

Dan*_*ted 6

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

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

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