EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

ASP.NET应用程序的创建和初始化

本主题详细介绍了最终用户请求XAF ASP.NET应用程序之后,创建和初始化主要XAF对象(如WebApplication)之前的步骤。

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

Web应用程序初始化

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

阶段

描述

干预方式

Web应用程序已创建

在开始新会话的请求开始时,将创建WebApplication类的实例。这由Global.Session_Start方法执行,该方法在ASP.NET应用程序项目中自动生成。

初始应用程序初始化

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

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

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

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

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

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

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

在应用程序项目的配置文件中指定所需的模块名称。通过这个字符串作为一个参数XafApplication.Setup的方法Global.Seesion_Start方法。

将此模块添加到您的解决方案中包含的模块。为此,请使用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方法之前。

该应用程序实例存储在当前会话中。

将WebApplication组件的实例分配给一个名为SessionApplicationVariable的Session变量。这是通过执行WebApplication.SetInstance在调用的方法Global.Session_Start是在ASP.NET应用程序的项目自动生成的方法。当Session被放弃或超时时,将丢弃WebApplication实例。

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

XafApplication.Setup方法被调用。这由Global.Session_Start方法执行,该方法在ASP.NET应用程序项目中自动生成。

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

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

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

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

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

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

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

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

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

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

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

如果需要将应用程序模型的差异存储在与XAFML文件不同的位置,则可以创建自定义应用程序模型差异存储。为此,请在调用Setup方法之前预订XafApplication.CreateCustomModelDifferenceStore事件,或在WebApplication类的后代中重写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属性。请注意,在ASP.NET Web XAF应用程序中,应用程序模型的公共部分由用户之间共享的单个实例表示。

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

注意

如果当前会话已过期,则将其重新启动,这将导致WebApplication对象的重新创建和重新初始化。

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