十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要讲解了“Orchard架构的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“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的启动
当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 registrations) {var container = CreateHostContainer(registrations);return container.Resolve();}public static IContainer CreateHostContainer(Action registrations) {……builder.RegisterType().As().As().SingleInstance();}}
DefaultOrchardHost负责生成Shell,其中引入了一些类:ShellContextFactory、ExtensionManager、ShellSettingsManager、CompositionStrategy、ShellBlueprint,现在就不细说了,因为我还没有怎么看
V public class DefaultOrchardHost : IOrchardHost, IShellSettingsManagerEventHandler, IShellDescriptorManagerEventHandler {void IOrchardHost.Initialize() {BuildCurrent();}IEnumerable BuildCurrent() {if (_current == null) {lock (_syncLock) {if (_current == null) {SetupExtensions();MonitorExtensions();_current = CreateAndActivate().ToArray();}}}return _current;}IEnumerable 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 文件。
感谢各位的阅读,以上就是“Orchard架构的简单介绍”的内容了,经过本文的学习后,相信大家对Orchard架构的简单介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!