摘要: 与CollectionOrderModule一样,LoggingModule也是一个Autofac模块。它以属性注入的方式给需要日志服务的对象设置Logger。 如果一个类有Orchard.Logging.ILogger型的公共可写实例属性(忽略索引),Autofac容器在解析(Resolve)该类的时 候,将"注入"一个ILogging实现类的实例。Orchard默认会注入一个CastleLogger对象。当然Orchard也允许一个类中有多个 ILogger型属性,也支持将CastleLogger替换成其他Logger。如有必要,请先了解一下简单工厂模式、抽象工厂模式和 阅读全文
posted @ 2012-10-18 11:43 alby 阅读(2511) 评论(2) 推荐(0) 编辑
摘要: CollectionOrderModule类是一个Autofac模块(Module,将一系列组件和相关的功能包装在一起),而非Orchard模块。其作用是保证多个注册到容器的组件能按FIFO(First In First Out)的顺序提取。下面举例说明: 1、创建ICustomerService接口: publicinterfaceICustomerService{ }2、创建两个实现ICustomerService接口的类: publicclassDefaultCustomerService:ICustomerService{ } publicclassVIPCustomerService 阅读全文
posted @ 2012-10-18 11:42 alby 阅读(2296) 评论(1) 推荐(1) 编辑
摘要: 概述OrchardStarter类是个静态类,主要作用是配置Autofac容器以及创建IOrchardHost(DefaultOrchardHost)对象,分别对应CreateHost和CreateHostContainer这两个静态方法。一、CreateHost方法CreateHost方法接受一个委托参数,返回一个IOrchardHost(Orchard宿主)型实例: publicstaticIOrchardHostCreateHost(Action<ContainerBuilder> registrations)该方法在Orchard的MvcHttpApplication类的H 阅读全文
posted @ 2012-10-18 11:41 alby 阅读(2388) 评论(0) 推荐(0) 编辑
摘要: 概述Orchard.WarmupStarter程序集包含三个类:WarmupUtility、WarmupHttpModule和Starter<T>。该程序集主要为Orchard应用启动初始化服务。一、WarmupUtility类 该类是一个静态工具类,包含一个静态只读String型字段WarmupFilesPath,以及三个方法EncodeUrl、ToUrlString和DoBeginRequest。1、WarmupFilesPath其值为"~/App_Data/Warmup/"。 publicstaticreadonlystringWarmupFilesPat 阅读全文
posted @ 2012-10-18 11:40 alby 阅读(4447) 评论(5) 推荐(4) 编辑
摘要: 概述分析一个的ASP.NET项目源码,首先可以浏览其项目结构,大致一窥项目其全貌,了解项目之间的依赖关系。其次可以浏览Web.config和Global.asax文件,找到应用程序的入口点。本 文主要分析Orchard项目的Global.asax文件,而真正的分析入口点在Global.asax的CodeBehind文件 Global.asax.cs中,即Orchard.Web.MvcApplication类(以下简称MvcApplication类)。MvcApplication类处理了三个事件Start,BeginRequest和EndRequest。其中是否真有名为"Start&q 阅读全文
posted @ 2012-10-18 11:34 alby 阅读(5083) 评论(1) 推荐(1) 编辑
摘要: 本文主要参考官方文档"How Orchard works"以及Orchardch上的翻译。源码分析应该做到庖丁解牛,而不是以管窥豹或瞎子摸象。所以先对Orchard架构有个整体的了解,以及对一些基本概念有所认识。创建一个基于Web的CMS(内容管理系统)不同于创建一个普通的Web应用程序:它更像是建立一个应用程序容器。 这样一个系统,必须拥有优良的开放性、可扩展性。但是作为一个可扩展系统,它可能会面临应用程序"可用性"的挑战:在系统中的核心模块与未知的未来模块的组合,包括用户界面级别的整合。组合相对独立的模块中的小组件,从而形成一个连贯的整体,是Orch 阅读全文
posted @ 2012-10-18 11:33 alby 阅读(8422) 评论(2) 推荐(3) 编辑
摘要: 从开发的角度讲,Global.asax文件是基于ASP.NET 应用程序的入口,而Application_Start方法正是一切的开始。 链接:IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述 Xoohoo实现了一个XoohooApplication类,其继承自HttpApplication。而XoohooApplication类供Global.asax来继承。 XoohooApplication类的Application_Start方法会完成两大工作。 一、初始化配置 1、设置IoC/DI容器。我们知道,虽然MVC3提供了依赖注入的支持,但并没有一个严格意义... 阅读全文
posted @ 2011-09-21 14:42 alby 阅读(2353) 评论(3) 推荐(4) 编辑
摘要: 作为一个开发者,我们免不了要做很多重复的事情。我们不只在重复别人造轮子,也在重复自我浪费时间——我们应该有一种罪恶感。庆幸的是很多人在帮助我们尽可能的减少这种重复,他们提出或总结了很多的宝贵的思想,开发了很多的有用的开发辅助工具。比如设计模式、类库、O/RM,代码生成器,以及更具体的CMS(Content Management System)等等。设计模式让我们在设计思想得到一定程度的解放,在设计方向上给予指引。这就像乘法口诀表,不用我们算个简单的3721还需要掰手指头;类库如.Net的BCL(Base Class Library)、FCL(Framework Class Library)等, 阅读全文
posted @ 2011-09-21 11:42 alby 阅读(2821) 评论(12) 推荐(1) 编辑
摘要: 五、SessionStateAttribute构造SessionStateAttribute对象时必须传入一个SessionStateBehavior枚举值,通过Attribute的Behavior属性可以获取该值。该Attribute只能用于引用类型(AttributeTargets.Class),不允许重复使用(AllowMultiple=false),允许继承(Inherited=true)。六、MvcRouteHandlerMvcRouteHandler类增加了一个接受IControllerFactory接口实现类的对象作为参数传的构造方法,构造对象允许传入null值。而构造方法内部只 阅读全文
posted @ 2011-03-30 13:10 alby 阅读(2298) 评论(0) 推荐(0) 编辑
摘要: 三、IResolver<TService>和SingleServiceResolver<TService>:IResolver<TService>、MultiServiceResolver<TService>:IResolver<IEnumerable<TService>>IResolver<TService>接口只有一个TService型的Current只读属性,返回相应类型的一个对象。这是一个有Lazy意味的轻量接口。一个简单的IResolver<TService>接口的实现类中,Current 阅读全文
posted @ 2011-03-25 15:16 alby 阅读(2399) 评论(0) 推荐(2) 编辑