Weapsy 分析三(Web层) 2 初始化
Weapsy的初始化比较复杂,接口和实现类使用Ninject进行映射。Model和Entity使用AtuotMapper进行转换。
还有各种安装服务,所以单独看了下。
相关代码:
Weapsy\Web\Framework\InjectionModule.cs --执行注入
Weapsy\Web\Models\AutoMapperStartupTask.cs --执行映射
F:\外面的项目\Weapsy\Libraries\Services\InstallService.cs --安装服务
下面是我对InstallService.cs中最重要的Initialize()方法的注释。
public void Initialize() { // ============================== // USERS AND ROLES 分超级管理员和管理员 带Email // ============================== string superAdminName = AppSettings.UserSuperAdminName; string superAdminEmail = AppSettings.UserSuperAdminEmail; string adminName = AppSettings.UserAdminName; string adminEmail = AppSettings.UserAdminEmail; string roleSuperAdmin = AppSettings.RoleSuperAdmin; string roleAdmin = AppSettings.RoleAdmin; string superAdminMembershipName = ""; string adminMembershipName = ""; //默认的关系 使用Email做帐号 还是用户名 默认是Email做帐号 if (AppSettings.DefaultMembershipName == "Email") { superAdminMembershipName = AppSettings.UserSuperAdminEmail; adminMembershipName = AppSettings.UserAdminEmail; } else { superAdminMembershipName = AppSettings.UserSuperAdminName; adminMembershipName = AppSettings.UserAdminName; } //如果不存在超级管理员 就创建一个超级管理员 if (Membership.GetUser(superAdminMembershipName) == null) { Membership.CreateUser(superAdminMembershipName, "123456", superAdminEmail); } //如果不存在用户管理员 就创建一个用户管理员 if (Membership.GetUser(adminMembershipName) == null) { Membership.CreateUser(adminMembershipName, "123456", adminEmail); } //如果不存在超级管理员的角色权限 创建个 if (!Roles.RoleExists(roleSuperAdmin)) { Roles.CreateRole(roleSuperAdmin); } //如果不存在管理员的角色权限 创建个 if (!Roles.RoleExists(roleAdmin)) { Roles.CreateRole(roleAdmin); } //如果超级管理员的角色权限没有roleSuperAdmin,添加这个帐号到超级管理员中 if (!Roles.IsUserInRole(superAdminMembershipName, roleSuperAdmin)) { Roles.AddUserToRole(superAdminMembershipName, roleSuperAdmin); } //如果用户管理员的角色权限没有roleAdmin,添加这个帐号到用户管理员中 if (!Roles.IsUserInRole(adminMembershipName, roleAdmin)) { Roles.AddUserToRole(adminMembershipName, roleAdmin); } //获取超级管理员帐号 MembershipUser mSuperAdmin = Membership.GetUser(superAdminMembershipName); //不通过缓存获取主数据库的超级管理员帐号信息 如果不存在创建 这里不控制权限 仅仅是帐号 if (_userService.GetByMembershipName(mSuperAdmin.UserName, false) == null) { User SuperAdmin = new User(); SuperAdmin.MembershipName = mSuperAdmin.UserName; SuperAdmin.MembershipEmail = mSuperAdmin.Email; SuperAdmin.MembershipDate = mSuperAdmin.CreationDate; SuperAdmin.DisplayName = superAdminName; SuperAdmin.ProfileName = superAdminName; SuperAdmin.CreatedByUserId = Consts.NullId; SuperAdmin.CreatedByIpAddress = HttpContext.Current.Request.UserHostAddress; SuperAdmin.CreatedOnDate = Utils.GetDateForDB(); SuperAdmin.ModifiedByUserId = Consts.NullId; SuperAdmin.ModifiedByIpAddress = HttpContext.Current.Request.UserHostAddress; SuperAdmin.ModifiedOnDate = Utils.GetDateForDB(); _userService.Create(SuperAdmin); } MembershipUser mAdmin = Membership.GetUser(adminMembershipName); ////不通过缓存获取主数据库的管理员帐号信息 如果不存在创建 这里不控制权限 仅仅是帐号 if (_userService.GetByMembershipName(mAdmin.UserName, false) == null) { User Admin = new User(); Admin.MembershipName = mAdmin.UserName; Admin.MembershipEmail = mAdmin.Email; Admin.MembershipDate = mAdmin.CreationDate; Admin.DisplayName = adminName; Admin.ProfileName = adminName; Admin.CreatedByUserId = Consts.NullId; Admin.CreatedByIpAddress = HttpContext.Current.Request.UserHostAddress; Admin.CreatedOnDate = Utils.GetDateForDB(); Admin.ModifiedByUserId = Consts.NullId; Admin.ModifiedByIpAddress = HttpContext.Current.Request.UserHostAddress; Admin.ModifiedOnDate = Utils.GetDateForDB(); _userService.Create(Admin); } // ============================== // SETTINGS // ============================== InstallSettings(); // ============================== // MODULE DEFINITIONS 模型定义 作用: // ============================== ModuleDefinition TextModuleDef = InstallModuleDefinition("Text", //模块名称 "Module for Html content",//介绍 "Text", //标题 "Text", //控制器名字 "Module", //方法 "Text", //管理员控制器 "Edit");//管理员方法 // ============================== // PLUGIN DEFINITIONS 插件定义 // ============================== PluginDefinition EditProfilePluginDef = InstallPluginDefinition( PluginType.Account, //插件类型:帐号 "EditProfile", //插件名字 "Edit Profile", //插件描述 "Edit Profile", //菜单文本 "Edit Profile", //菜单标题 "Account", //控制器名称 "EditProfile", //方法名称 "", //管理员控制器名称 "", //管理员方法 "editprofile-dashboard.png", //仪表图标 "editprofile-menu.png");//菜单图标 PluginDefinition ChangePasswordPluginDef = InstallPluginDefinition( PluginType.Account, "ChangePassword", "Change Password", "Change Password", "Change Password", "Account", "ChangePassword", "", "", "changepassword-dashboard.png", "changepassword-menu.png"); PluginDefinition ChangeEmailPluginDef = InstallPluginDefinition( PluginType.Account, "ChangeEmail", "Change Email", "Change Email", "Change Email", "Account", "ChangeEmail", "", "", "changeemail-dashboard.png", "changeemail-menu.png"); // ============================== // WIDGET DEFINITIONS // ============================== // ----- // ============================== // THEMES 主题设置 默认主题:2012-黑色风格 排列第一 // ============================== // Theme defaultTheme = InstallTheme("TwentyTwelve - Dark", 1); // ============================== // PAGE TEMPLATES 页面模板 // ============================== PageTemplate PageTemplate1 = InstallPageTemplate( "Header-Left-Content-Right-Footer", //模板名称- "Header,Left,Content,Right,Footer");//模板区域 PageTemplate PageTemplate2 = InstallPageTemplate("Header-Content-Right-Footer", "Header,Content,Right,Footer"); PageTemplate PageTemplate3 = InstallPageTemplate("Header-Left-Content-Footer", "Header,Left,Content,Footer"); PageTemplate PageTemplate4 = InstallPageTemplate("Header-Left-Right-Footer", "Header,Left,Right,Footer"); PageTemplate PageTemplate5 = InstallPageTemplate("Header-Content-Footer", "Header,Content,Footer"); // ============================== // MODULE TEMPLATES 模块/组件模板 // ============================== ModuleTemplate ModuleTemplate1 = InstallModuleTemplate("Standard");//标准模板 ModuleTemplate ModuleTemplate2 = InstallModuleTemplate("Empty");//空模板 // ============================== // SITE 站点定义 安装默认的主题 第一个模板 第一个模块 // ============================== Site site = InstallSite(defaultTheme.Id, PageTemplate1.Id, ModuleTemplate1.Id); // ============================== // LANGUAGES 语言定义 // ============================== List<Language> Languages = new List<Language>(); //安装默认语言 默认语言是en-US Language defaultLanguage = InstallLanguage(site.Id, AppSettings.DefaultLanguage, 1); Languages.Add(defaultLanguage); // ============================== // MAIL TEMPLATE TYPES 邮件模板类型 // ============================== //注册邮箱模板类型 MailTemplateType registerMailTemplateType = InstallMailTemplateType(new MailTemplateType() { AppId = Consts.NullId, Name = "Register", Description = "Register", TokenController = "MailTemplateType", TokenAction = "RegisterTokens" }); //密码恢复邮箱模板 MailTemplateType passwordRecoveryMailTemplateType = InstallMailTemplateType(new MailTemplateType() { AppId = Consts.NullId, Name = "PasswordRecovery", Description = "Password Recovery", TokenController = "MailTemplateType", TokenAction = "PasswordRecoveryTokens" }); //改密码邮箱模板 MailTemplateType changePasswordMailTemplateType = InstallMailTemplateType(new MailTemplateType() { AppId = Consts.NullId, Name = "ChangePassword", Description = "Change Password", TokenController = "MailTemplateType", TokenAction = "ChangePasswordTokens" }); // ============================== // MAIL TEMPLATES 邮箱模板 // ============================== MailTemplate registerMailTemplate = InstallMailTemplate(new MailTemplate() { MailTemplateTypeId = registerMailTemplateType.Id, SiteId = site.Id, Name = "Register", Description = "Register Default Template", Subject = "Welcome to {SiteTitle}!", BodyHtml = "<strong>...Body Html...</strong>", BodyPlain = "...Body Plain...", }); MailTemplate passwordRecoveryMailTemplate = InstallMailTemplate(new MailTemplate() { MailTemplateTypeId = passwordRecoveryMailTemplateType.Id, SiteId = site.Id, Name = "PasswordRecovery", Description = "Password Recovery Default Template", Subject = "{SiteTitle} - Password Recovery", BodyHtml = "<strong>...Your Password...</strong>", BodyPlain = "...Your Password...", }); MailTemplate changePasswordMailTemplate = InstallMailTemplate(new MailTemplate() { MailTemplateTypeId = changePasswordMailTemplateType.Id, SiteId = site.Id, Name = "ChangePassword", Description = "Change Password Default Template", Subject = "{SiteTitle} - Change Password", BodyHtml = "<strong>...Your Password...</strong>", BodyPlain = "...Your Password...", }); // ============================== // EMAIL ACCOUNTS 邮箱帐号 // ============================== EmailAccount defaultEmailAccount = InstallEmailAccount(new EmailAccount() { SiteId = site.Id, Address = "info@mail.com", DisplayName = site.Title, Host = "smtp.mail.com", Port = 25, UserName = "", Password = "", DefaultCredentials = false, Ssl = false }); // ============================== // PAGES // ============================== //页面 安装了一个主页 Page Page1 = InstallPage(site.Id, "Home", "Welcome!"); // ============================== // MODULES // ============================== InstallTextModule(site.Id, Page1.Id, TextModuleDef.Id, "Left", 1, "Left Zone - Module 1", "First Text Module in Left Zone"); InstallTextModule(site.Id, Page1.Id, TextModuleDef.Id, "Left", 2, "Left Zone - Module 2", "Second Text Module in Left Zone"); InstallTextModule(site.Id, Page1.Id, TextModuleDef.Id, "Content", 1, "Content Zone - Module 1", "Weapsy " + Consts.Version + "<br /><br /><strong>Default Credentials</strong><br />login name: " + superAdminMembershipName +" <br />password: 123456"); InstallTextModule(site.Id, Page1.Id, TextModuleDef.Id, "Content", 2, "Content Zone - Module 2", "Second Text Module in Content Zone"); InstallTextModule(site.Id, Page1.Id, TextModuleDef.Id, "Right", 1, "Right Zone - Module 1", "First Text Module in Right Zone"); InstallTextModule(site.Id, Page1.Id, TextModuleDef.Id, "Right", 2, "Right Zone - Module 2","Second Text Module in Right Zone"); // ============================== // ACCOUNT PLUGINS // ============================== Plugin editProfilePlugin = InstallPlugin(site.Id, EditProfilePluginDef.Id, "Edit Profile", "Edit Profile", 1); Plugin changePasswordPlugin = InstallPlugin(site.Id, ChangePasswordPluginDef.Id, "Change Password", "Change Password", 2); Plugin changeEmailPlugin = InstallPlugin(site.Id, ChangeEmailPluginDef.Id, "Change Email", "Change Email", 3); // ============================== // UPDATE SITE 更新站点信息: 语言 主页 注册邮箱模板 密码恢复模板改密码模板 发送者邮箱帐号 // ============================== Site siteToUpdate = new Site(); siteToUpdate = _siteService.GetById(site.Id); siteToUpdate.LanguageId = defaultLanguage.Id; siteToUpdate.HomePageId = Page1.Id; siteToUpdate.RegisterMailTemplateId = registerMailTemplate.Id; siteToUpdate.PasswordRecoveryMailTemplateId = passwordRecoveryMailTemplate.Id; siteToUpdate.ChangePasswordMailTemplateId = changePasswordMailTemplate.Id; siteToUpdate.RegisterEmailAccountId = defaultEmailAccount.Id; siteToUpdate.PasswordRecoveryEmailAccountId = defaultEmailAccount.Id; siteToUpdate.ChangePasswordEmailAccountId = defaultEmailAccount.Id; _siteService.Update(siteToUpdate, new List<LocalizedSite>()); // ============================== // RESTART APPLICATION // ============================== Utils.RestartApplication(); // ============================== // REDIRECT TO HOME PAGE // ============================== HttpContext.Current.Response.Redirect(""); }
最后 Web层除控制器外,已经没多少好东西了。唯一要看的就是里面的Framework文件夹。 业务的东西大家按需阅读,里面都是一些
机制的实现。