免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Types Info Subsystem XAF新手入門 - 類型子系統(tǒng)

類型子系統(tǒng)概述類型子系統(tǒng)是XAF的核心概念,但我們平時卻很少關(guān)注它,它集中存儲了模塊中的類型,它是生成應(yīng)用程序模型(Application Model)的基礎(chǔ),它與XAF中其它的概念都有所關(guān)聯(lián),了解它可以使我們加深對XAF的理解 。
類型子系統(tǒng)是什么第一次接觸類型子系統(tǒng)的小伙伴,應(yīng)該感覺它與.NET中的類型系統(tǒng)是相似的,并且它中的一些接口與類與.NET類型系統(tǒng)也是對應(yīng)的,如:ITypeInfo,IMemberInfo,IAssemblyInfo,是不是感覺很熟悉,其實XAF類型子系統(tǒng)就是對.NET類型系統(tǒng)的一個包裝,并加入了一些XAF特有的功能,下面是XafApplication的構(gòu)造函數(shù) 。

Types Info Subsystem XAF新手入門 - 類型子系統(tǒng)

文章插圖
TypesInfo是ITypesInfo的唯一派生類,它是類型子系統(tǒng)的核心,它提供了類型子系統(tǒng)的大部分功能,它也是類型子系統(tǒng)的代名詞 。
XafApplication構(gòu)造函數(shù)中唯一需要傳遞的參數(shù)就是ITypesInfo,從這點也可以看出類型子系統(tǒng)在XAF中的重要性 。TypesInfo的實例是通過XafTypesInfo以單例形式提供的(XafTypesInfo.Instance),需要注意在整個XAF項目中只有這一個TypesInfo實例,在不同的平臺(WinForm與Blazor)下也是一樣的,下面是XafTypesInfo創(chuàng)建TypesInfo實例的方法 。
【Types Info Subsystem XAF新手入門 - 類型子系統(tǒng)】在XAF項目中的任何地方,你都可以直接使用XafTypesInfo.Instance訪問到TypesInfo實例,在Blazor中ITypesInfo已被注入到容器中,你可以通過ServiceProvider.GetService<ITypesInfo>()獲取TypesInfo實例,實際也是指向XafTypesInfo.Instance 。

Types Info Subsystem XAF新手入門 - 類型子系統(tǒng)

文章插圖
使用過XAF一段時間的小伙伴應(yīng)該都知道XAF模塊中的一些資源(BusinessObject、Controller等)都是通過反射(Reflection)方式進行收集的,而反射是有一定性能損耗的,如果在每次需要的時候都反射一次,系統(tǒng)的性能損耗會很大 。TypesInfo會在XAF初始化時(Application.Setup),對模塊(XAF模塊)類庫中的類型進行收集并緩存起來,不會對非模塊類庫進行收集,除非在Module類中進行了導出(如何導出非本模塊中的類型,會在后續(xù)的章節(jié)中進行介紹) 。
TypesInfo收集的類型(System.Type)會通過TypeInfo進行包裝,類型的公共字段或?qū)傩允峭ㄟ^IMemberInfo進行包裝,同時TypesInfo也提供了更加豐富的功能 。在還沒有深入了解TypesInfo之前,你可以簡單的將TypesInfo理解為是對模塊中類型的緩存,并提供了一些對緩存類型的操作方法(如:創(chuàng)建、更新、查找等) 。
.NET中的反射常用于框架的開發(fā),框架可以通過反射收集類型的信息,并通過這些類型信息輔助完成一些功能,XAF也是一個開發(fā)框架,TypesInfo承擔了類型信息收集的角色,理所當然成了XAF的類型中心,其它功能模塊就可以通過TypesInfo訪問到自己所需的類型 。
應(yīng)用程序模型(Application Model)就是基于TypesInfo創(chuàng)建了模型中的Controller、Action、View等節(jié)點,關(guān)于應(yīng)用程序模型,會在后面章節(jié)講解 。
DevExpress.ExpressApp.DC命名空間下包含了XAF類型子系統(tǒng)的主要類型,大家可以通過ILSpy等類似工具查看該命名空間下類型之間的依賴關(guān)系 。
說一個小插曲,DC在XAF中就是DomainCompnent(域組件),ApplicationModel是基于DomainComponent的,BusinessObject中的NonPersistentObject也是基于DomainComponent的,在更早之前XPO有一個基于DomainComponent自動生成PersistentObject的功能(現(xiàn)在它已被棄用了),在這些DomainComponent當中,感覺ApplicationModel與XPO的DomainComponent很類似,都是基于接口的,NonPersistentObject只借用了DomainComponent這個概念,使用了DomainComponentAttribute,但在工作原理上與前兩個有很大的區(qū)別 。由于官方文檔中沒有關(guān)于它們之間關(guān)系的描述,以上的觀點更多的只是個人的見解,有熟悉的小伙伴可以在評論區(qū)說說你的看法 。

經(jīng)驗總結(jié)擴展閱讀