C# 将.Net核心(2.2)web应用程序移植到.Net标准(2.1)以用于Xamarin项目

C# 将.Net核心(2.2)web应用程序移植到.Net标准(2.1)以用于Xamarin项目,c#,asp.net,asp.net-mvc,.net-standard-2.1,C#,Asp.net,Asp.net Mvc,.net Standard 2.1,我最近在.NETCore中构建了一个MVCWeb项目,现在我想为它构建一个Android和iOS前端。我理解.Net标准和.Net核心之间的区别,但我在确定哪个项目应该包含哪些内容时遇到了问题。首先,我将描述当前的解决方案: 数据模型: 正如您所料,DataModel包含我的所有基本模型和DTO。它被所有其他项目引用 数据访问: 执行所有数据存储/采集操作(存储库)并仅引用数据模型 主机服务: 提供数据并引用DataModel和DataAccess的RESTful服务 显示: 前端MVC代码,

我最近在.NETCore中构建了一个MVCWeb项目,现在我想为它构建一个Android和iOS前端。我理解.Net标准和.Net核心之间的区别,但我在确定哪个项目应该包含哪些内容时遇到了问题。首先,我将描述当前的解决方案:

数据模型: 正如您所料,DataModel包含我的所有基本模型和DTO。它被所有其他项目引用

数据访问: 执行所有数据存储/采集操作(存储库)并仅引用数据模型

主机服务: 提供数据并引用DataModel和DataAccess的RESTful服务

显示: 前端MVC代码,包含视图模型、视图、控制器等,并引用数据模型和主机服务

我的理解是,为了在针对Adroid和iOS的Xamarin项目中重用它们,Display项目的某些部分确实需要放在.Net标准项目中,但是我有点困惑,应该将哪些部分转移到新的.Net标准项目中。显然,视图需要保留在显示项目中,因为它们包含特定于web前端的Razor代码。在我看来,唯一需要移动到新项目的是视图模型和控制器(以及它们引用的任何对象)?这听起来是对的还是我过于简化了?我是否遗漏了什么,或者有什么我应该知道的问题

FWIW,我运行了.Net portability Analyzer并收到了以下结果:

它指出这些项目与.Net标准不兼容:


如何确定这些冲突发生的位置以解决它们?我在Display项目中查找了目标成员(即Microsoft.AspNetCore.Razor.Hosting.RazorConfiguration NameAttribute),但没有找到任何匹配项,因此我不确定如何修复它们。任何指点都将不胜感激

对于那些提出这个问题并希望做同样事情的人,以下是我进一步研究的结果

简单的答案是你不能

答案很长:

我的web代码使用MVC(模型-视图-控制器)编写,而Xamarin使用MVVM(模型-视图-模型)。这两个基础设施不兼容。它们都有一个共同的模式,但这就是相似之处的终结

在MVC中,视图向控制器请求操作。然后,控制器从模型中检索数据,创建组成视图所需的任何必要数据结构,然后返回使用数据结构显示视图的视图。数据结构可以是一个独立的项,如List或包含许多字段Listemployeeid、int CurrentEmployeeID、string CurrentEmployeeName等的ViewModel。该ViewModel只是一个临时存储设备,用于在控制器和视图之间传输数据,不包含任何业务逻辑

另一方面,在MVVM中,ViewModel取代了控制器。视图从ViewModel请求操作。然后,ViewModel执行请求的操作(从模型中检索数据),并将数据存储在调用INotifyProperty的自身中。视图具有PropertyChanged的侦听器,当它从ViewModel接收到事件通知时,它从ViewModel请求更新的数据

因此,虽然这两个基础架构(可以)使用一种叫做ViewModel的东西,但它们的操作方式非常不同,不能跨代码库共享。在上述场景中,将共享的唯一代码是从HostService(模型)开始的。PVS.Display中的任何代码都不会在我的Xamarin项目中重复使用。

请访问