EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

Windows窗体应用程序创建和初始化

本主题详细介绍了最终用户运行XAF Windows Forms应用程序之后,直到创建和初始化主要XAF对象(如WinApplication)之前执行的步骤。

在下图中,您可以看到应用程序创建和初始化的整个过程可以分为四个步骤。

WinApplication初始化

下表详细描述了所有这些步骤。

阶段

描述

干预方式

创建一个应用程序

WinApplication的实例已创建。这是由Program.Main方法执行的,该方法在Windows Forms应用程序项目中自动生成。

初始应用程序初始化

新创建的应用程序已初始化。在配置文件的appSettings部分中指定的设置被读取到应用程序中:

通过UserModelDiffsLocation键指定用于存储Model.User.xafml文件的位置。

使用TraceLogLocation键指定用于存储应用程序的日志文件的位置。

设计者对应用程序的初始化

然后,通过“应用程序设计器”中指定的值初始化应用程序。这是由InitializeComponent方法执行的,该方法在WinApplication类的构造函数中自动调用。

所述XafApplication.Modules集合由添加到模块填充模块中的部分设计。每个模块均已设置。这意味着将当前WinApplication实例分配给ModuleBase.Application属性。

如果您需要添加未在Toolbox中注册的模块,因此无法通过Designer添加,请使用以下方法之一:

在应用程序项目的配置文件中指定所需的模块名称。将此字符串作为Program.Main方法中XafApplication.Setup方法的参数传递。

将此模块添加到您的解决方案中包含的模块。为此,请使用ModuleBase.RequiredModuleTypes集合。

要查看这两种方法的代码示例,请参阅“注册模块的方法”主题。

除了设置Application对象之外,您还可以使用模块执行自定义操作。为此,请重写模块的ModuleBase.Setup方法。

所述XafApplication.Connection属性被设置为在指定的类型的对象设计连接部。选择“连接”部分后,将在“属性”网格中指定连接字符串。

通过应用以下技术之一,可以避免使用Designer:

在应用程序项目的配置文件中指定连接字符串。将此字符串分配给XafApplication.ConnectionString属性(请参阅此属性的描述)。

调用XafApplication.Setup方法之前,请先设置XafApplication.Connection和/或XafApplication.ConnectionString属性。

XafApplication.Security属性设置为指定类型的对象设计安全性部分。在同一部分中指定了安全系统要使用的身份验证策略。选择“安全性”部分时,将在“属性”网格中指定安全系统要使用的用户类型。

eXpressApp框架提供的SecurityStrategyComplex安全系统类型。您可以使用“应用程序设计器”进行设置。如果需要使用实现ISecurityStrategyBase接口的自定义安全类型,请在调用XafApplication.Setup方法之前,将其创建并分配给代码中的XafApplication.Security属性。如果需要使用自定义身份验证策略或自定义User类型,请在调用XafApplication.Setup方法之前初始化它们和XafApplication.Security属性。

如果您没有通过应用程序设计器或代码初始化安全系统,则将使用SecurityDummy。此安全类型允许对所有类型的对象进行所有操作。这就是为什么在运行应用程序时看不到安全系统的存在的原因。

所述XafApplication.ApplicationName属性被设置为在指定的值属性的时网格的应用被选择部分。

您可以在代码中为XafApplication.ApplicationName属性分配自定义值-在调用XafApplication.Setup方法之前。

通过Setup方法初始化应用程序

XafApplication.Setup方法被调用。这是由Windows窗体应用程序项目中自动生成的Program.Main方法执行的。

Setup方法有几个重载。默认情况下,调用不带参数的方法。它将保留已初始化的属性,并使用默认值继续进行初始化过程:

您可以使用所需的参数调用Setup方法,具体取决于您需要创建哪些自定义对象。但是,我们建议您改用上面介绍的方法。

显示默认的初始屏幕形式(DevExpress.ExpressApp.Win.Core.SplashScreen)。

您可以使用WinApplication.SplashScreen属性设置自定义启动屏幕。自定义启动屏幕必须实现ISplash接口。要查看示例,请参阅“使用自定义类显示启动表单”主题。

使用XafApplication.ConnectionString属性指定的连接字符串创建默认的对象空间提供程序(请参阅XafApplication.ObjectSpaceProvider)。

若要创建自定义对象空间提供程序,请在调用Setup方法之前订阅XafApplication.CreateCustomObjectSpaceProvider事件。或者,使用Setup方法作为参数传递所需的ObjectSpaceProvider对象。

您可以在WinApplication类的后代中重写XAFApplication.CreateDefaultObjectSpaceProvider方法。当不使用任何自定义方法来传递对象空间提供者时,将调用此方法。此方法创建内置ObjectSpaceProvider类的实例。您可以返回实现IObjectSpaceProvider接口的另一个类的实例。

将创建一个默认的Controllers Manager(ControllersManager)。该对象包含已注册模块中声明的所有Controller的集合。

您可以在WinApplication类的后代中重写XAFApplication.CreateControllersManager方法。此方法创建内置ControllersManager类的实例。您可以返回另一个类的实例。

将创建一个默认的模块管理器(ApplicationModulesManager)。该对象包含Modules集合,其中包含应用程序要使用的模块。该集合由XafApplication.Modules集合中的模块填充。另外,SystemModule被添加为默认模块。

您可以在WinApplication类的后代中重写XAFApplication.GetDefaultModuleTypes方法。此方法创建内置ApplicationModulesManager类的实例。您可以返回另一个类的实例。

另外,您可以重写GetDefaultModuleTypes方法以返回默认情况下要添加到应用程序中的模块(除了系统模块)。

将创建一个默认的应用程序模型差异存储(FileModelStore)。

如果需要将应用程序模型的差异存储在与XAFML文件不同的位置,则可以创建自定义应用程序模型差异存储。为此,请在调用Setup方法之前订阅XafApplication.CreateCustomModelDifferenceStore事件,或在WinApplication类的后代中重写WinApplication.CreateModelDifferenceStoreCore方法。

对象空间提供者和控制器管理器被分配给应用程序的相应属性:XafApplication.ObjectSpaceProviderControllersManager

订阅XafApplication.SettingUp事件,以自定义要分配给应用程序对象的对象。使用事件处理程序的参数访问所需的对象。

来自Modules Manager的Modules集合的模块被添加到当前应用程序的XafApplication.Modules集合中,因为在此步骤中,后者的集合包括仅通过Application Designer添加的模块。

实例化了管理应用程序模型的创建和初始化的应用程序模型管理器(ApplicationModelsManager)。

应用程序模型已创建。在内部,应用程序模型具有分层结构,因此,首先,创建构成应用程序模型内部的实际层:

创建了应用程序模型的零层。最初,它是空的。在应用程序生命周期中,它按需填充了数据。

要扩展应用程序模型,请通过应用程序模块的ModuleBase.ExtendModelInterfaces方法传递所需的模型接口。另外,您也可以在Controllers中实现IModelExtender接口。要修改现有的节点生成器,请实现一个生成器更新程序,并通过模块的ModuleBase.AddGeneratorUpdaters方法对其进行注册。有关详细信息,请参阅在代码中扩展和自定义应用程序模型主题。

将为应用程序中使用的每个模块创建一个层。该层填充了Model.DesignedDiffs.xafml文件中的数据,该文件包含在特定模块中创建的应用程序模型差异。

要修改该层的数据,请修改所需模块的XAFML文件。例如,可以通过“模型编辑器”来完成。

将为应用程序项目创建一个层。该层填充了Model.xafml文件中的数据,其中包含在应用程序项目中创建的应用程序模型差异。

要修改此层的数据,请修改应用程序项目的XAFML文件。例如,可以通过“模型编辑器”来完成。

其次,所有创建的层都与主层一起包装。

主层本身不包含任何信息。它充当所有其他层的代理。通常,当您访问应用程序模型时,您将处理主层。

应用程序模型的最终状态被分配给XafApplication.Model属性。

在应用程序完全初始化之后,订阅XafApplication.SetupComplete事件以创建其他对象(帮助程序,提取程序等)。

转载保留此链接,注明出处