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文件夹。 业务的东西大家按需阅读,里面都是一些
机制的实现。