日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Orchard架构介绍

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Orchard架构介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  在如何使用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的啟動
  • 當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();

    }

    }
  • DefaultOrchardHost負責生成Shell,其中引入了一些類:ShellContextFactoryExtensionManagerShellSettingsManagerCompositionStrategyShellBlueprint,現在就不細說了,因為我還沒有怎么看
  • 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架构介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。