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



Types Info Subsystem XAF新手入門 - 類型子系統

文章插圖
官方文檔中沒有關于IEntityStore的介紹,與其相似的還有一個ITypeInfoSource,官方文檔中也沒有介紹 , 通過查看源碼 , 大體知道了它們的含義,它們都有多個派生類,大部分都是重合的 。雖然TypesInfo包含了所有類型,但都是放在一個緩存當中的,類型也有不同的分類,主要是想將持久化類型(XPO中的類型)與非持久化類型進行單獨的存儲,在這里持久化類型與非持久化類型它們統稱為Entity,而派生自IEntityStore的類,就是用于分別存儲不同類型的Entity,例如:XpoTypeInfoSource是負責存儲XPO中的類型,NonPersistentTypeInfoSource是負責存儲非持久化對象類型(NonPersistentObject) , IEntityStore主要負責Entity類型的存儲,而ITypeInfoSource在負責類型存儲的同時,也提供了對類型的操作 , 你可以通過ILSpy工具查看它們的更多內容 。
下面是TypesInfo的創建方法,前面已介紹過
Types Info Subsystem XAF新手入門 - 類型子系統

文章插圖
在上面的代碼中,我們可以看到TypesInfo會默認添加一個NonPersistentTypeInfoSource實例,在XAF初始化的過程中,還會添加一個XpoTypeInfoSource實例(這是默認情況下,如果你的系統中存在多個ObjectSpaceProvider,還會添加其它的) 。
類型子系統能做什么通過前面的介紹,我們知道TypesInfo可以為XAF功能模塊提供所需的類型,也可以稱為XAF的類型中心,官網提供了一個訪問示例:https://docs.devexpress.com/eXpressAppFramework/113224/business-model-design-orm/types-info-subsystem/access-business-object-metadata
TypeInfo可以對成員(IMemberInfo)添加或修改,我們可以通過它來實現自定義TypeInfo,XAF提供了多種自定TypesInfo的方式,但我們一般會選擇是在Module或Controller中,在Module或Controller中都是重寫CustomizeTypesInfo方法,結果都是一樣的 , 在選擇上如果只會在某個Controller中調用,這樣自定義與調用都放在一個Controller中會更加的直觀,當然在Module中自定義會更加統一,這樣你做了哪些自定義在Module中就能看到,這兩種方式沒有優劣,Controller中的自定義也只會調用一次 。官網提供了一個CustomizeTypesInfo示例:https://docs.devexpress.com/eXpressAppFramework/113583/business-model-design-orm/types-info-subsystem/use-metadata-to-customize-business-classes-dynamically
寫在最后本篇文章主要介紹了類型子系統的概念及在XAF中的作用,與其它XAF概念的結合及應用會在后面的章節中介紹 。TypesInfo還有很多有用的屬性與方法,想更加深入的了解,你還需要查閱官方文檔 , 文檔不全的可以結合源碼 。
【Types Info Subsystem XAF新手入門 - 類型子系統】

推薦閱讀