c# - 根据包含在其中的项目在 .net 类库中引用不同的模型对象

标签 c# .net wpf class-library portable-class-library

我当前的解决方案具有以下设置:

  • 带有我的模型的可移植类库
  • 具有处理所有数据库流量的存储库的类库
    • 使用模型引用可移植类库
  • WPF 项目
    • 同时引用模型和存储库
  • Windows 应用商店应用
    • 使用模型引用可移植类库
  • ASP MVC 网站
    • 同时引用模型和存储库

在我不得不向 WPF 项目添加数据验证之前,此设置对我来说一直运行良好。我必须在模型上使用 IDataErrorInfo。我有点卡住了,因为 IDataErrorInfo 在可移植类库中不受支持。

我尝试的是为我的可移植类库中的每个模型类向我的 WPF 项目添加一个同名的新模型类,并从我的库中的类继承。然后我可以在子类中添加所有验证代码。问题当然是我的 WPF 项目使用类库和我的存储库,它返回我的模型基类的实例(来自可移植类库)。在我的 WPF 项目中强制转换模型类的每一次出现似乎不是正确的方法..

所以我的问题是:我能否以某种方式让存储库类库根据所使用的项目返回不同的模型对象? (总是基类,但在 WPF 项目中使用时是子类)。 (我确实意识到让存储库 lib 知道我的 wpf 项目并不是最好的主意,但如果那是我所需要的,我会接受的。)

如果还有其他方法可以达到我的目的,请告诉!

最佳答案

听起来很棘手。我想到了不同的解决方案。

为您拥有的每个模型类创建一个接口(interface)。

  • 优点:WPF 应用程序无需关心具体实现。您可以通过存储库或类似的方式引入它们。
  • 缺点:需要大量工作,WPF 设计器不能很好地处理界面,因此您必须创建假货或:

使用 T4 生成您的类/接口(interface)

  • 优点:您没有接口(interface)带来的维护。此外,您不必多次反射(reflect)更改(模型、接口(interface)、假)。
  • 缺点:您必须深入研究它 :),目前还没有想到其他的。

关于c# - 根据包含在其中的项目在 .net 类库中引用不同的模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740316/

相关文章:

wpf - 数据网格上的弹出窗口中的按钮未引发单击事件

c# - 惰性依赖注入(inject)

c# - 您可以利用名为 `var` 的类的隐式类型变量吗?

c# - 以编程方式启动独立于平台的进程

c# - 如何在前台窗口获取之前捕获击键?

c# - 如何将数据表设置为 WPF 数据网格 C#?

c# - 通过 xaml 设置用户控件自定义依赖属性

c# - 不要逃避换行

c# - C# 中 Like 运算符的替代方案是什么?

c# - 在嵌套属性中使用 GetValue() 在反射中抛出 TargetException