簡體   English   中英

caliburn.micro,Bootstrapper和CompositionRoot

[英]caliburn.micro, Bootstrapper and CompositionRoot

我試圖了解什么是CompositionRoot。

到現在為止,我還沒有找到關於它的深刻描述,只是簡短地陳述了不應該做的事情。

利用caliburn.micro時出現的Bootstrapper已經是“ CompositionRoot”的意思了嗎?

還是更接近servicelocator反模式,因為它只能傳遞程序集內部及其依賴項中的任何內容。

如果有人對CompositionRoot有很好的描述,請分享。 我已經知道了ploeh博客。

如果我發現CompositionRoot可以帶來更好的體系結構和/或幫助我解決問題,那么我仍然願意購買該書。 但是,我知道周圍沒有足夠的信息對我有所幫助。

更新

假設我的所有ViewModel都注入了EventAggregator(構造函數注入)。 現在,我想在需要時動態創建這些ViewModel。 我可以預先注冊類型(在CompositionRoot中),但是以后如何解決依賴關系? 據我了解,容器在組成根之后不應該被觸摸。 確實,我不想在需要它們之前創建所有實例(這會使應用程序啟動緩慢)。 這里是“注冊-解決-發布”嗎? (該模式也是在ploeh博客中創造的)

我想您已經在http://blog.ploeh.dk/2011/07/28/CompositionRoot上看到了Mark的文章。

聲明如下:

組合根是應用程序中組合模塊的(最好)唯一位置。

而且這應該是:

盡可能靠近應用程序的入口點。

對於Caliburn.Micro, Bootstrapper類提供了ConfigureContainer方法供您覆蓋和組成模塊。

理想情況下,僅是您的合成根目錄具有對IoC容器的引用。

Caliburn.Micro將通過您的容器解析您的shell視圖模型(如果您使用Bootstrapper的通用版本)。

如果您確實需要在合成根目錄之外引用容器,它也會提供一個靜態IoC類,該類是Service Locator(anti)模式的實現。

更新資料

如果您希望在運行時通過組成根之后通過容器解析類型(例如,如果您具有復雜的依賴關系鏈),請使用工廠類型。

這些工廠類型還將引用您的IoC容器。 您可以:

  1. 傳遞對容器的引用作為對工廠類型的依賴
  2. 在工廠中使用“服務定位器”模式(例如Caliburn.Micro IoC類)
  3. 一些IoC容器(例如Castle Windsor和(使用擴展名)Ninject)將基於工廠接口和約定為您生成工廠類型(這是最好的選擇)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM