幸福框架:模块化开发
什么是模块
模块 = 后台逻辑(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。