Orchard的多个子站点特性
Orchard中可以支持多个子站点。当你运行Orchard的时候,通常一个网站运行在一个应用程序域中。这也是一般ASP.NET应用程序区分两个网站的方法,也就是说两个网站,就需要部署两套网站应用程序。然而,Orchard提供了另外一种区分两个网站的方法。在Orchard中引入了多站点的概念(multi-tenancy,直译为多租户,但我觉得翻译为多站点更贴切),允许你在一个ASP.NET应用程序域中同时运行多个站点。从内存使用率的角度来看这是非常有用的,因为应用程序域的初始化、卸载和回收都是非常消耗资源的。在一个单独的应用程序域中运行多个独立的Orchard网站,就可以在一台服务器上配置更多的站点。做为主机托管商无疑会十分青睐这种方式,这样可以大量节约成本。就一般主机空间的租赁用户来说,也可以在一个主机空间中部署多个站点,这样也能省钱。多站点的功能在Windows Azure环境中会表现的更好,因为部署到Azure中就可以轻松支持多个站点了。
Orchard中关于子站点的概念
host
一个host就是一个orchard站点。host是应用级别的单例,一个orchard站点只有一个host。
tenant
tenant代表了一个子站点。一个orchard站点可以有多个子站点。当一个orchard站点启动时,会有一个默认的子站点,名字是default。
shell是子站tenant点级别的单例。一个shell代表了一个子站点,一个host代表了一个orchard站点。
一个orchard站点可以有多个子站点,接一个host可以有多个shell,每个shell对应一个shellsettings。默认情况下,一个orchard站点有一个默认的子站点,即一个host有一个默认的shell
子站点的配置
子站点的配置其实就是orchard中的ShellSettings的配置。每一个子站点都有且仅有一个ShellSettings。
shellSetting是Orchard.Environment.Configuration.ShellSettings.
ShellSettingsManager:该类负责读取Setting.txt文件和保存shellSetting到Setting.txt。
ShellSettingsSerializer:该类负责将Setting.txt文件中的内容序列化为一个shellSetting对象。
相关类的源码解析
AppDataFolder
对App_Data文件夹的抽象,所有的传进来的或返回的虚拟路径都是基于"~/App_Data".
AppDataFolderRoot
对根目录"~/App_Data"的抽象.主要是为了可以对appdataFolder进行单元测试
ShellSettingsManager
用来从Setting.txt中读取文件内容到shellSetting对象,或者将shellSettings对象的信息写入到Settings.txt文件中。
IEnumerable<ShellSettings> IShellSettingsManager.LoadSettings()
void IShellSettingsManager.SaveSettings(ShellSettings settings)
ShellSettingsSerializer
shellSettignManager类做的事情在内部调用的都是ShellSettingsSerializer的方法来执行的