【问题标题】:Is there any way I can implement IValidatableObject on Portable Class Library Project?有什么方法可以在可移植类库项目上实现 IValidatableObject 吗?
【发布时间】:2013-04-15 19:57:50
【问题描述】:

我想问一下我对可移植类库的疑问。我正在开发一个 DAL 层,我正在为我的业务对象使用 Portable 项目,该项目面向 .Net Framework 4.03 及更高版本、SilverLight 4 及更高版本以及适用于 Windows 应用商店应用的 .Net。

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

【问题讨论】:

    标签: portable-class-library


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢,这似乎是一个不错的解决方案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-01-11
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多