引用 .net 类库中的不同模型对象,具体取决于它所包含的项目



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

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

在我不得不将数据验证添加到WPF项目之前,这个设置对我来说一直很好。我必须在模型上使用IDataErrorInfo。由于可移植类库不支持IDataErrorInfo,我有点陷入困境。

我尝试为我的可移植类库中的每个模型类添加一个同名的新模型类到我的WPF项目中,并从库中的类继承。然后我可以在子类中添加所有的验证代码。当然,问题是我的WPF项目将类库与我的存储库一起使用,这些存储库返回我的模型基类的实例(来自可移植类库)。在我的WPF项目中,铸造模型类的每一个出现似乎都不是一条路。。

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

如果还有其他方法可以实现我的目标,请告诉我!

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

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

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

使用T4 生成您的类/接口

  • 优点:您没有接口所能带来的维护。此外,您不必多次反映更改(Model、Interface、Fake)
  • 缺点:你必须深入研究:),其他的暂时不会想到

设置起来很复杂,但您可能可以自己在可移植库中定义IDataErrorInfo,然后在包含该类型的平台上,用具有向前类型的库的类型替换PCL。

关于这方面的更多信息,请参阅我的回答:有什么方法可以在可移植类库项目上实现IValidatableObject吗?

这可能是分部类的一个很好的应用程序

在类库中,模型类被定义为分部类:

public partial class MyModelClass
{
...
}

WPF应用程序可以添加定义,例如:

public partial class MyModelCLass : IDataErrorInfo
{
public string this[string columnName]
...
public string Error { get; private set; }
...
}

相关内容

最新更新