新建一个 面向目标 net5 的基础 XAF 项目(Win或者Blazor,不带安全的身份认证与授权)

一、新建      

      新建一个 面向目标 net5 的 XAF 项目(Win或者Blazor),会产生三个项目,其中一个主项目(启动项目),另两个是库项目,被主项目引用。其中一个可重用于同种项目类型,命名:XXXX.Module.

      面向 net5 的 XAF 项目,已经不支持 Access 数据库,主要是 XPO 没有相应 的数据驱动引擎。微软官方EFCore 也不支持了,只有 SQL Server 、SQLite、Inmemory 等的驱动支持。参考:https://docs.microsoft.com/zh-cn/ef/core/providers/?tabs=dotnet-core-cli  , 虽然有非官方的Access驱动Nuget包(https://www.nuget.org/packages/EntityFrameworkCore.Jet/) .

       但 XPO 没有相应的升级,官方文档找不到参考: https://docs.devexpress.com/XPO/2114/product-information/database-systems-supported-by-xpo?p=netstandard。  可以考虑用:SQLite  代替。

       新建的项目,如果没有选择扩展模块,或者安全认证等功能,在数据库中只生成了一个表: XPObjectType

二、补增

       在已经有项目的基础上,补充新项目(右健解决方案,选择:Add Devexpress Item \  New Project),可以有三种项目选择。1)可重用模块库, 2)Winform 项目  3)Blazor 项目。 后两个选择,又会自动产生 两个项目(一个库项目、一个主体项目)。

 

三、主体项目 application 主要文件解释

                appsettings.json  或   App.config                      项目参数配置用,如数据库链接字符串 ConnectionString。    

                Model.xafml                                                      模型自定义配置用   

                XXXXWindowsFormsApplication  / XXXXBlazorApplication   

                                 (继续于 BlazorApplication.cs 或 WinApplication.cs ,又继续于:抽象类 XafApplication )

                Program.cs (及 Startup.cs)、                     系统启动入口,配置入口

        1、Win系统启动时,会创建(new)一个 XXXXWindowsFormsApplication 实例 winApplication,

                设置实例: ConnectionString,DatabaseUpdateMode(调试时)

                实例然后:   winApplication.Setup();   winApplication.Start();

        2、Blazor 系统启动,按启动参数是否有:help、updateDatabase(forceUpdate、silent选项) 进行,

              然后 使用 Startup 构建 Host。

               Startup 类服务配置,除了  services.AddRazorPages();    services.AddServerSideBlazor();

               重点如下:   services.AddHttpContextAccessor();

                  services.AddSingleton<XpoDataStoreProviderAccessor>();
                 services.AddScoped<CircuitHandler, CircuitHandlerProxy>();
                 services.AddXaf<XXXXBlazorApplication>(Configuration);        难点: Scoped  或  Singleton ?

                     后面还有:app.UseXaf() ;  这是一个中间件!

         3、XXXXWindowsFormsApplication    是核心

                初始化   InitializeComponent()  ,增加 四个基础模块(module1 ~ 4,SystemModule、SystemWindowsFormsModule、2个引用项目),绑定下列2个事件委托。

               override方法  CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args)

                                      自定义两个 ObjectSpaceProvider

               事件委托 : XXXXWindowsFormsApplication_CustomizeLanguagesList(object sender, CustomizeLanguagesListEventArgs e)

                                 XXXXWindowsFormsApplication_DatabaseVersionMismatch(object sender, DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs e)

          4、 XXXXBlazorApplication 是核心

                初始化   InitializeComponent()  ,增加 四个 基础模块(module1 ~ 4,2个系统模块 SystemModule、SystemBlazorModule,2个引用项目模块),绑定下列 1 个事件委托。

                  override 方法  OnSetupStarted()   配置属性:ConnectionString、 DatabaseUpdateMode

                  override方法  CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args)

                                      自定义两个 ObjectSpaceProvider  

                   事件委托 : XXXXBlazorApplication_DatabaseVersionMismatch(object sender, DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs e)

                 

 四、主体项目通过代码增加模块(Module)

       1、XafApplication  的继承者都有 Modules 属性

             初始化时增加:

             public  XXWindowsFormsApplication()  /  XXBlazorApplication()    {

                    InitializeComponent();

                    this.Modules.Addnew MyCustomModule.CustomModule()); 

             //下列仅限于 WinForm 类

             SplashScreen = new DXSplashScreen(typeof(XafSplashScreen), new DefaultOverlayFormOptions());   }

        2、 App.config 配置有模块,调用 XafApplication 继承者 的 Setup 重载方法

               App.config  配置中可有:

                 <appSettings>

                        <add key="Modules" value="MySolution.MyCustomModule" />

                </appSettings>

                XXwinApplication.Setup("MySolution", winApplication.ConnectionString, ConfigurationManager.AppSettings["Modules"].Split(';'));

               注意:所有模块必须在 XafApplication.Setup 方法调用前/中完成.

 

五、模块(Module)项目主要文件解释

                Model.DesignedDiffs.xafml                               模型自定义配置用   

                Module.cs  / BlazorModule  / WinModule.cs    模块定义文件,成对,另一个(XXXX.Designer.cs),

                     继承于: ModuleBase ,属性:RequiredModuleTypes、AdditionalExportedTypes、AdditionalControllerTypes 等

                模块定义涉及:  以前有可视化设计器,所以模块都有两个分部类 partial 组成,且 Sealed。

                 构造初始化: InitializeComponent();     增加引用的模块,增加输出类。------ 这里增加引用模块

                     this.AdditionalExportedTypes.Add(typeof(XX.HCategory));  ------  仅限于平台无关项目(业务类)

                     this.RequiredModuleTypes.Add (typeof(XX.SystemModule));

                  重写方法:

                 public override IEnumerable<ModuleUpdater> GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB)

                 public override void Setup(XafApplication application)

                 public override void CustomizeTypesInfo(ITypesInfo typesInfo)

 

posted @ 2021-06-06 10:44  eccorp  阅读(374)  评论(0编辑  收藏  举报