“nopCommerce_4.30”及其以上的版本,通过第三方FluentMigrator数据交换中间件,实现程序与数据库软件的CURD操作。并对多种数据库软件支撑数据交换操作,这些数据库软件包括:MySQL、Microsoft SQL Server和PostgreSQL。
由于在“nopCommerce_4.40.3”中安装本地化服务被定义的展示层,关于Controller的所有定义不能单独的被分割定义在展示层外, 而必须定义在展示层中,不然会造成循环引用错误。
- 删除程序工程中的Controllers、Nop.Web项。
- 在程序工程中新建Nop.Data、Nop.Web(MVC模板)项,并设置Nop.Web(MVC模板)项为启动项。
0015 DataProviderType、NopDataSettingsDefaults
DataProviderType枚举,该枚举定义了4种数据库软件,其它方法通过调用指定其中的一个,用来确认通过那个数据库软件,与当前程序进行CURD数据交互操作。
NopDataSettingsDefaults类,该类在程序启动项(显示层)的指定位置中设置了一个文件,该文件持久化存储着一个指定数据库软件的数据库连接字符串。
0016 DataSettings、DataSettingsManager
DataSettings类,当前程序通过该类及其属性实例与启动项(显示层)中的指定文件,进行数据库连接信息的数据交换操作。
DataSettingsManager类,通过该类可以从程序启动项(显示层)的指定位置中的文件中(这里特指:dataSettings.json),获取/写入数据库连接字符串相关的所有数据信息。
程序中没有专门用于对DataSettings实例单例化操作的定义,DataSettings实例的单例化实现是结合BaseSingleton类中的字典实例,在程序执行时只要字典实例中存储有DataSettings实例,且实例值不为:null,则程序就不会对DataSettings实例进行覆盖操作,从而从整个程序的调用逻辑上来实现DataSettings实例的单例化。DataSettings类型实例与DataSettings单例实例,在程序执行时的调用关系如下图所示:
0017 IInstallationLocalizationService、InstallationLocalizationService
InstallationLocalizationService类,继承于IInstallationLocalizationService接口,程序第一次执行时, 该类通过浏览器,获取本地化语言、文字对程序安装页面进行本地化的初始操作。在实际开发中如果一个程序工程的使用范围,不是那么的广泛,那么该类的定义就不是必须的,本人为了简化操作删除了该类中定义的大量关于本地化操作的相关实现。
0018 DependencyRegistrar、INopConnectionStringInfo、InstallModel
DependencyRegistrar类,该类是nopCommerce定义的第2个依赖注入类,该类只对定义的程序启动项(展示层--Nop.Web)中的,接口/抽象类/类与相应的具体实现类进行依赖注入操作。
INopConnectionStringInfo接口,程序通过该接口与程序中所定义相应的文件(这里特指:dataSettings.json),交换数据库连接字符串的所有数据信息。
InstallModel类,继承于INopConnectionStringInfo接口,该类在程序执行时用于安装页面与当前程序进行数据信息的交换。
- 定义并重构Nop.Web.Controllers.InstallController类。
4、重构Nop.Web.Program类和Nop.Web.Startup类。
5、重构Nop.Web\Views\Install\Index.cshtml视图。
6、按F5执行程序,程序正常运行到默认启动页面。
对以上功能更为具体实现和注释见:21-07-26_Nop_4.40.3(005_数据层基本定义与数据库安装页面重构完成,默认页面正常启动)。