幸福框架:模块化开发

什么是模块

模块 = 后台逻辑(DLL)+ 显示逻辑(静态资源)+ 数据库 + 其它初始化逻辑。

如何识别模块和通知模块各种事件

识别模块

1 [assembly: Happy.Bootstrap.ParticipateInBootstrap]

监听启动事件

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.IO;
 7 
 8 using Happy.Bootstrap;
 9 
10 namespace Happy.Example
11 {
12     public sealed class BootstrapListener : IBootstrapListener
13     {
14         public void Start(IBootstrapService bootstrapService)
15         {
16             File.WriteAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log.txt"), "模块已经启动");
17         }
18     }
19 }

如何安装模块

  • 手工安装。
  • 模块自己自动安装。
  • 采用xml格式描述模块,然后由安装程序自动安装。

这个是后话,先不介绍了。

宿主的启动

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Http;
 6 using System.Web.Mvc;
 7 using System.Web.Routing;
 8 using System.Threading;
 9 
10 using Happy.Bootstrap;
11 using Happy.Web.Bootstrap;
12 using Happy.Event.Bootstrap;
13 using Happy.Domain.Bootstrap;
14 using Happy.Command.Bootstrap;
15 using Happy.Application.Bootstrap;
16 using Happy.Application;
17 using Happy.Application.PessimisticLock;
18 
19 namespace Happy.Web.Mvc.Host
20 {
21     // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
22     // visit http://go.microsoft.com/?LinkId=9394801
23     public class MvcApplication : System.Web.HttpApplication
24     {
25         protected void Application_Start()
26         {
27             BootstrapService
28              .Current
29              .UseRegisterServiceByConventionPlug()
30                 .UseEventSubscriberRegister()
31                 .UseDomainLayerRegister(ServiceLifecycle.PerRequest)
32                 .UseCommandRegister()
33                 .UseApplicationLayerRegister()
34                 .Done()
35              .IntegrateWithMvc()
36              .IntegrateWithExtJs()
37              .Start();
38 
39             AreaRegistration.RegisterAllAreas();
40 
41             WebApiConfig.Register(GlobalConfiguration.Configuration);
42             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
43             RouteConfig.RegisterRoutes(RouteTable.Routes);
44         }
45     }
46 }

宿主需要提供的服务

  • IOC容器服务。
  • 自动注册服务。
  • 元数据管理服务。
  • 内置常用模块:导航、权限和流程。

备注

模块化开发会遇到很多问题,不过有些问题可以作为一个限制,比如可以这样限制一下:一、同一个组件只允许一个版本;二、所有DLL都部署到bin中,否则你自己加载DLL和重写ControllerFactory。

原文地址:https://www.cnblogs.com/happyframework/p/3142276.html