请注意,本站并不支持低于IE8的浏览器,为了获得最佳效果,请下载最新的浏览器,推荐下载 Chrome浏览器
欢迎光临。交流群:166852192

开发人员常见问题解答


Orchard都依赖哪些类库?

Orchard使用了大量的外部类库,您可以在\lib目录中找到。Orchard中所用的开源项目简介

Orchard所支持的.net版本?

Orchard当前支持.net 4.0

什么是默认和发展分支? 我应该使用哪一个?

Orchard开发是分成两个支路:默认(default)和发展(DEV)
默认的是一个稳定的分支,您应该使用它。发展分支是不稳定的,Orchard正在做3周迭代开发,通常在迭代结束时,发展分支将会被推送到默认分支上。由于这些原因建议使用默认分支作为您的理想选择。

我可以写一些什么样类型扩展?

Orchard的模块和主题支持扩展,请注意模块和主题的API是在不断发展和改变的,尽管能建立今天的这些扩展,不过您也应该预料他今后会发生变化,并可能破坏目前在代码基础上建立的扩展。

模块的物理地址在哪里?

模块在src\Orchard.Web\Modules目录中。模块可以包含ASP.NET View(aspx,ascx,cshtml)和静态内容,不用复制模块从一个项目到另一运行的项目。核心模块是\src\Orchard.Web\Core目录中。

模块中Module.txt文件是做什么的?



这个文件是模块的清单,它被放在模块的根目录,能被Orchard识别并加载。它是YAML格式的文件。下面是一个module.txt的例子:


name: AnotherWikiauthor: Coder Notaprogrammerwebsite: http://anotherwiki.codeplex.comversion: 1.2.3orchardversion: 1antiforgery: enabledfeatures:  AnotherWiki:     Description: My super wiki module for Orchard.    Dependencies: Versioning, Search    Category: Content types  AnotherWiki Editor:    Description: A rich editor for wiki contents.    Dependencies: TinyMCE, AnotherWiki    Category: Input methods  AnotherWiki DistributionList:    Description: Sends e-mail alerts when wiki contents gets published.    Dependencies: AnotherWiki, Email Subscriptions    Category: Email  AnotherWiki Captcha:    Description: Kills spam. Or makes it zombie-like.    Dependencies: AnotherWiki, reCaptcha    Category: Spam

模块中AdminMenu.cs文件是做什么的?



这个文件实现了Orchard的INavigationProvider的接口,它在后端让模块自己加入到后台控制面板菜单中,通常是声明你的模块注入到管理菜单的链接,通过链接调用controller的actions。

模块中Permissions.cs文件是做什么的?

这个文件实现了IPermissionProvider接口,它让模块声明一组权限以及这些权限赋给默认Orchard角色。每次为模块添加一个新权限,你都能使用Orchard授权API检验针对当前用户的权限。也能在角色管理页面管理自定义哪个角色的权限。

应该怎么做自定义模块里对当前用户/角色的授权?



Orchard自带一个实现IOrchardServices接口的默认服务,在你的构造函数中简单的包含IOrchardService,你将得到默认的注入实现;如下所示:
public AdminController(IMyService myService, IOrchardServices orchardServices) {            _myService = myService;            Services = orchardServices;}

在这里services给你关于Authorizer的授权,该通知应以书面形式通知ContentManager访问关于Orchard content manager和TransactionManager。在这里检查如果当前用户有某个权限,你应该这样做:
Services.Authorizer.Authorize(Permissions.SomeModulePermission, T(Some operation failed));

什么是核心模块?

核心模块是Orchard一种特殊的模块(如他名字一样),在\src\Orchard.Web\Core目录下,他们在源码解决方案中的Orchard.Core项目,这些模块随Orchard默认安装并一直启用。

为什么是核心模块是一个模块?

不同点类似于整体的概念与微内核:它在Orchard的高层设计期间是相当明显的,就像所有模块需要的扩展点,这一切构成了核心框架。拿通用模块举例介绍BodyPart,内容类型的许多类型通用的核心理念,如blog posts或pages。现在我们已经作为Orchard框架DLL的一部分实现了这部分,并且有模块依赖它,但它不再具有作为一个模块的好处,如能hook up handlers,drivers,views,routes等等。这个关系到MVC和areas,同一目录下属于一个任何的area。

核心模块的核心是什么?

现在我们要深入模块的核心理念,为什么不连同其它较明显的Orchard模块放进Modules目录,如comments 模块,这是它关于依赖的关系。在Orchard中Modules中的模块能被禁用、卸载、更新,我们更喜欢自己设计一些模块,尽可能不依赖其它非核心模块,这是内容类型架构后整个设计的一部分,Payges和Blog posts属于Pages和Blog模块,不引用Comments或Tag模块,但它们可能附加到Pages和Blog模块上,这个行为保证基本的内容类型架构而不直接引用一个或其它别的模块。核心模块是Orchard框架的一部分,模块可以依赖它们,我们从实际的目标使它们作为Orchard框架的组成部分。模块能依赖它们并直接访问它们公开的接口。

我如何编写和运行测试?

Orchard自带了一个测试的解决方案目录,这个方案可以承载两种类型的测试:
  • Unit Tests: 这些是NUnit测试装置,为模块写一个fixture,在Orchard.Tests.Modules 下简单地创建一个目录,并把你的测试移入。
  • Integration Tests: 这些也是NUnit测试,使用SpecFlow生成功能文件,你的集成测试在Orchard.Specs下进行,如果你是新的BDD approach,这有许可示例可以看一下。


注意:这是为Orchard标准源码版的模块写测试,要为你自己的第三方模块写测试,请在你自己的分离目录进行,我们提供设置一个第三方模块开发环境指导。

我该如何贡献我的成果到Orchard?



您可以到Orchard 源码托管处,提交补丁代码,也可以开发第三方模块;如果有一些新的文章您可以发表在Orchard中文社区。

如何建立一个WCF服务公开Orchard功能?

要在Orchard中托管WCF服务,它所有的好东西都从IoC来的,所以你必须:
使用新OrchardHost Factory为你的服务创建一个SVC文件:
<%@ ServiceHost Language=C# Debug=true Service=Orchard.Service.Services.IService, Orchard.ServiceFactory=Orchard.Wcf.OrchardServiceHostFactory, Orchard.Framework %>


通常使用IDependency作为注册服务
using System.ServiceModel;namespace Orchard.Service.Services {  [ServiceContract]  public interface IService : IDependency {    [OperationContract]    string GetUserEmail(string username);  }}


提供实现,即Service:IService。

App_Data文件夹是做什么的?



AppData用来存储各种数据,AppData中的内容从不被服务,内容被组织成下面这样:
  • cache.dat文件: 是网站中为每个租户启用的功能的缓存XML文档描述, 这只是一个缓存,修改它可能有不可预知的结果
  • hrestart.txt文件:是一个由系统感应的文件,表示需要重启程序。
        Dependencies文件夹: 用来存储动态编译的DLLs并有一个XML文件,dependencies.xml来跟踪每个模块是怎么被编译的(动态地 或不是)
  • Exports文件夹: 包含了import/export 功能产生的export XML 文件。
  • Localization文件夹: 包含了本地化的po文件。
  • Logs文件夹: 包含了日志文件
  • RecipeQueue文件夹: 在创建recipes队列期间用来执行。
  • Sites文件夹: 包含了每个租户的一个目录,默认的租户是在Default目录中(如果没有租户被创建),每个目录包含下面信息:
    • mappings.bin 是nHibernate mappings的二进制序列化缓存
    • Orchard.sdf租户的SQL CE数据库文件
    • reports.dat 是旧的日志文件
    • Settings.txt 描述每个租户的 low-level设置(database provider, connection string, etc.)
  • Warmup文件夹 包含了预热模块产生的缓存的页面版本,warmup.txt文件包含关于最后warmup文件生成的时间戳。



作者原创内容不容易,如果觉得内容不错,请点击右侧“打赏”,赏俩给作者花花,也算是对作者付出的肯定,也可以鼓励作者原创更多更好内容。
更多详情欢迎到QQ群 166852192 交流。