EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

注册模块的方法

在XAF应用程序中,您可以使用当前解决方案中声明的模块,以及外部程序集提供的模块。本主题列出了可遵循的在应用程序中注册模块的方法。

使用解决方案向导

使用解决方案向导创建新的XAF解决方案时,可以将模块添加到应用程序中。为此,请在“选择其他模块”步骤中选择模块。

SolutionWizard_Step4

注意

解决方案向导允许您从预定义的列表中添加XAF模块。要添加自定义模块,请使用本主题中描述的其他方法。

使用模块设计器或应用程序设计器

在现有XAF解决方案中,启动“应用程序设计器”或“模块设计器”。将所需的模块从工具箱拖到设计器的“必需的模块/模块”部分。

Tutorial_EM_Lesson_5_1

DX中提供了XAF随附的模块(Extra Modules)19.2工具箱”的“ XAF模块”选项卡。如果模块是自定义的并且在外部程序集中声明,请在Toolbox中注册该模块,以便在需要时将其拖到“应用程序”或“模块设计器”中。有关详细信息,请参阅MSDN中的“如何:向工具箱添加项目”主题。

在代码中添加模块

本节列出了可遵循的几种在代码中添加模块的方法。一般的限制是应在调用XafApplication.Setup方法之前执行代码。在XAF中,当已经执行Setup方法时,不支持添加模块。您可以根据特定条件动态注册模块。例如,您可以在启动应用程序时显示自定义表单,并根据用户输入注册某些模块。

  • 使用ModuleBase.RequiredModuleTypes属性注册模块类型

    现有模块项目中,您可以注册一个额外的模块,该模块将与当前模块一起加载。在模块构造函数(默认情况下在Module.csModule.vb)文件中声明)中,将所需的模块添加到ModuleBase.RequiredModuleTypes列表中。

    public sealed class MySolutionModule : ModuleBase {
       //...
       public MySolutionModule() {
          InitializeComponent();
          this.RequiredModuleTypes.Add(typeof(MyCustomModule.CustomModule));
       }
    }
    
  • 将模块实例添加到XafApplication.Modules列表中

    应用程序项目中,您可以实例化所需的模块,并将模块对象添加到XafApplication.Modules列表中。例如,您可以在WinApplication / WebApplication后代构造函数中执行此操作。

    public MySolutionWinApplication() {
        InitializeComponent();
        this.Modules.Add(new MyCustomModule.CustomModule);
    }
    
  • 将模块程序集名称传递给XafApplication.Setup方法

    这种方法的优点是您不必显式引用所需的模块程序集。必要时,程序集将通过其名称动态加载。XafApplication.Setup方法的重载采用moduleAssemblies参数-一个字符串数组,指定要加载的模块程序集名称。例如,您可以使用此方法加载应用程序配置文件中列出的模块。继续下一部分以查看示例。

将模块添加到应用程序配置文件

这种方法允许第三方插入自己的模块,而无需重新编译您的应用程序。请注意,第三方模块可能包含覆盖安全限制,修改您的业务逻辑等的不安全代码。这就是为什么默认情况下禁用从配置文件添加模块的原因。仅在受信任的环境中启用它。

在WinForms应用程序中,编辑Program.csProgram.vb)文件。

static class Program {
   static void Main() {
      //...
      MySolutionWindowsFormsApplication winApplication = new MySolutionWindowsFormsApplication();
      //...
      winApplication.Setup("MySolution", winApplication.ConnectionString, 
         ConfigurationManager.AppSettings["Modules"].Split(';'));
      winApplication.Start();
      //...
   }
   //...
}

在ASP.NET应用程序中,编辑Global.asax.csGlobal.asax.vb)文件。

public class Global : System.Web.HttpApplication {
   protected void Session_Start(object sender, EventArgs e) {
      WebApplication.SetInstance(Session, new MySolutionWebApplication());
      //...
      WebApplication.Instance.Setup("MySolution", WebApplication.Instance.ConnectionString, 
         ConfigurationManager.AppSettings["Modules"].Split(';'));
      WebApplication.Instance.Start();
   }
   //...
}

现在,您可以将模块程序集名称添加到应用程序配置文件(App.config和/或Web.config)中的模块列表中。

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

在这里,MySolution.MyCustomModule是自定义模块程序集名称。

注意

如果要添加的模块包括Entity Framework DbContext,请在模块级别为其注册EFObjectSpace提供程序。然后,重写ModuleBase.Setup方法并处理XafApplication.CreateCustomObjectSpaceProvider事件。

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