在如何使用Orchard搭建敏捷个人的网站(2)中 介绍了如何使用Orchard,但对于我们来说,更重要的是学习Orchard是如何架构的,如果我们自己编写一个类似应用该如何做。今天有空再次看看 Orchard的其它内容,本篇介绍一下Orchard的一些架构方面的内容。Orchard内容较多,现在还只是了解一些皮毛,还有待进一步学习,放上 来权当随笔记录。

Architecture

Orchard foundations

Orchard构建在已有的一些框架和类库之上,下面是一些主要内容:

  • ASP.NET MVC:这是微软开源的基于MVC的Web开发框架
  • NHibernate:NHibernate 是一个ORM工具,从Hibernate演化而来
  • Autofac: 一个IoC container。Orchard大量使用依赖注入
  • Castle Dynamic Proxy: Castle 是.Net中很早就出现的一个开源项目,Castle Dynamic Proxy是一个生产动态代理的东东

Orchard Framework

Orchard framework处于Orchard的最底层,你可以把它看成是Orchard的基础类库。

  • Orchard的启动
  1. 当Orchard web应用启动后,生成一个应用域级别的单例的Orchard Host(DefaultOrchardHost)

    View Code

    public class MvcApplication : HttpApplication {

    protected void Application_Start() {

    _host = OrchardStarter.CreateHost(MvcSingletons);
    _host.Initialize();

    }

    public static class OrchardStarter {

    public static IOrchardHost CreateHost(Action<ContainerBuilder> registrations) {

    var container = CreateHostContainer(registrations);

    return container.Resolve<IOrchardHost>();

    }

    public static IContainer CreateHostContainer(Action<ContainerBuilder> registrations) {

    ……

    builder.RegisterType<DefaultOrchardHost>().As<IOrchardHost>().As<IEventHandler>().SingleInstance();

    }

    }

  2. DefaultOrchardHost负责生成Shell,其中引入了一些类:ShellContextFactory、ExtensionManager、ShellSettingsManager、CompositionStrategy、ShellBlueprint,现在就不细说了,因为我还没有怎么看
View Code

public class DefaultOrchardHost : IOrchardHost, IShellSettingsManagerEventHandler, IShellDescriptorManagerEventHandler {

void IOrchardHost.Initialize() {

BuildCurrent();

}

IEnumerable<ShellContext> BuildCurrent() {

if (_current == null) {

lock (_syncLock) {

if (_current == null) {

SetupExtensions();

MonitorExtensions();

_current = CreateAndActivate().ToArray();

}

}

}

return _current;

}

IEnumerable<ShellContext> CreateAndActivate() {

var allSettings = _shellSettingsManager.LoadSettings();

if (allSettings.Any()) {

return allSettings.Select(

settings => {

var context = CreateShellContext(settings);

ActivateShell(context);

return context;

});

}

……

}

ShellContext CreateShellContext(ShellSettings settings) {

if (settings.State.CurrentState == TenantState.State.Uninitialized) {

Logger.Debug("Creating shell context for tenant {0} setup", settings.Name);

return _shellContextFactory.CreateSetupContext(settings);

}

Logger.Debug("Creating shell context for tenant {0}", settings.Name);

return _shellContextFactory.CreateShellContext(settings);

}

}

  • Dependency injection

在Orchard中生成依赖项的标准方法是实现IDependency 或者其继承接口。

对于依赖有三种可能的范围,具体讲解等待后期分析:

o Request:每次HTTP请求都创建一个新的实例,请求处理有销毁。这种对象实现IDependency
          o Object:实现ITransientDependency,实例不共享
          o Shell: 实现ISingletonDependency,单例

  • ASP.NET MVC

Orchard是构建在ASP.NET MVC 之上的一个框架,但是为了增加主题、多租户等额外功能而也挺入了额外的一些层和概念。例如,当需要一个特定视图时引入LayoutAwareViewEngine。严格的说,这不是一个新的视图引擎,因为它并不关心实际绘制,而只是包含一些查找当前主题下正确视图的一些逻辑功能,然后委托给实际的视图引擎去展现。

Types, Parts and Fields

Orchard能够处理任意内容类型(content types),内容类型又是由内容Parts组成,例如一个blog、video都可能有地址、回复、tag等,为了重用可以把回复作为一个part存在于一个module中,这样只需要生成一次就行了。

Parts本身又有自己的属性和内容字段。内容字段(Fields)也是一个重用的概念,它比parts更细粒度,它可以使用在多个part中。

Content Manager

所有的内容通过ContentManager 对象进行访问,ContentManager有查询内容存储、版本内容和管理发布状态等功能

Transactions

Orchard自动为每次HTTP请求生成一个事务

Event bus

Commands

很多在Orchard中可以执行的动作都可以通过命令行形式执行,这些Command都需要实现,命令方法使用CommandName 属性标识

Search and indexing

默认使用Lucene 进行索引和查询

Caching

基于ASP.NET cache之上的缓存,Orchard缓存API主要好处是对每个租户的透明性

File systems

Orchard的文件系统是抽象概念的,可以是直接的物理文件,也可以是部署在云端的blob storage

Orchard core

Orchard.Core 程序集包含Orchard必须使用到的一些模块,例如feeds、navigation和routable

Modules

Orchard默认发布一些内建的模块,例如blog等。一个模块只是一个包含manifest.txt 文件的一个ASP.NET MVC area 文件。

Themes

Orchard有一个基本的设计原则,那就是主题的所有HTML都可以被替换。Orchard是基于shapes来展现的,主题引擎的工作就是发现 当前主题,并未当前每一个shape找到最佳的展现方式。每一个shape可以通过模块的视图目录或者通过代码方式来获取一个默认的展现方式。

参考:How Orchard Works

推荐:你可能需要的在线电子书 

我的新浪围脖: http://t.sina.com.cn/openexpressapp


转载于:https://blog.51cto.com/zhoujg/491229

Orchard架构介绍相关推荐

  1. MindSpore Lite整体架构介绍

    MindSpore Lite整体架构介绍 MindSpore Lite框架的总体架构如下所示: • 前端(Frontend): 负责模型生成,用户可以通过模型构建接口构建模型,将第三方模型和MindS ...

  2. MindSpore整体架构介绍

    MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. • MindSpore前端表示层(Mi ...

  3. 微服务架构介绍和RPC框架对比

    微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...

  4. 伍哥原创之豆荚商城商品搜索架构介绍

    为什么80%的码农都做不了架构师?>>>    豆荚商城(www.dou55.com)商品搜索架构介绍 1,需求分析 伍哥所在的豆荚商城是一个家电行业的B2C网上零售平台.作为这样一 ...

  5. 12.1 LNMP架构介绍;12.2 MySQL安装;12.3-2.4 PHP安装(上下);12.5

    扩展: Nginx为什么比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html apache和ng ...

  6. Kafka系列一之架构介绍和安装

    Kafka架构介绍和安装 写在前面 还是那句话,当你学习一个新的东西之前,你总得知道这个东西是什么?这个东西可以用来做什么?然后你才会去学习它,使用它.简单来说,kafka既是一个消息队列,如今,它也 ...

  7. LAMP架构介绍、MySQL和MariaDB介绍、MySQL安装

    2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍 Linux+Apache+MySQL+PHP 就是在linux系统上安装httpd. mysql .PHP, ...

  8. 互联网直播云计算架构介绍

    互联网直播云计算架构介绍 原文:互联网直播云计算架构介绍 思想 拆分 URL分层 模块化 云服务结构 ECS 云计算的优势 -------------------------------------- ...

  9. LNMP基础架构介绍与安装

    1.LNMP架构介绍 LNMP==Linux+Nginx+Mysql+PHP  nginx:省资源,省cpu,所以在高并发时能够处理更多的请求,高端能达到3万到5万的并发量.  nginx和LAMP不 ...

最新文章

  1. APS:大型多模态室内摄像机定位系统
  2. 阿里研究员谷朴:API 设计最佳实践的思考
  3. mysql fio测试_MySQL Hardware--FIO压测
  4. 求2个数的最大公约数
  5. python 用selenium自动启动百度并搜索关键词
  6. js拖动窗口 用层模拟可移动的小窗口
  7. html表格怎样传入数据类型,Echarts图表中pie类型tooltip中formatter函数传递的参数从哪里来?...
  8. Android 常用adb shell 命令(转)
  9. 食住玩|3dmax2009到3dmax2022下载安装软件渲染器VRAY与CORONA,提升3dmax疯狂模渲大师一点儿不难!
  10. 基于51单片机简易计算器LCD1602显示
  11. 网络安全实验室|网络信息安全攻防学习平台(基础关1-12)
  12. 全国DNS服务器ip地址
  13. android viewgroup点击变色,Android ViewGroup点击效果(背景色)
  14. 俄罗斯方块中方块的旋转变形
  15. 无法运行regedit.exe的简单解决方法
  16. 超强可视化图表工具:Smartbi!!
  17. C++笔记——第一个MFC程序
  18. 安路TD和modelsim仿真
  19. 适用于WF4.0的流程设计器 (Wxd.WF,BPM.Foundation,Wxwinter.WF 升级用)
  20. 关于duedate补充

热门文章

  1. Day5:python之函数(3)
  2. 架构师是大忽悠吗?阿里技术大牛告诉你真相!
  3. 3.cocos2dx它Menu,由menu为了实现场景切换
  4. 使用logminer分析日志文件
  5. Linux Apache 怎么修改工作模式
  6. 掌握ES6/ES2015核心内容
  7. JSON.parse和JSON.stringify方法
  8. cf1132E. Knapsack(搜索)
  9. Oracle中procedure和function创建举例
  10. koa --- koa-bouncer验证