有一個問題找到直接的答案,雖然這可能很失敗,我的一部分搜索正確的條款。Caliburn Micro IoC.Get
我想知道的是,在caliburn使用IoC.Get();返回對該現有對象的引用,以及(我假設)如果沒有該對象的實例IoC將創建一個
另外,如果我是通過新手動創建實例,並且稍後使用了ioc,該怎麼辦。得到,這將返回我手動創建的同一個實例還是一個新的?
我問的原因是這樣的,我正在寫一個WPF應用程序,並且即時使用IoC.Get最初加載我的viewmodels,現在由於重新設計,我希望能夠創建一組全新的視圖,所以我的父視圖模型看起來與此類似:
public ProjectContainerViewModel()
{
_containersListModel = IoC.Get<ContainersListViewModel>();
_orderedItemListModel = IoC.Get<ItemsOrderedViewModel>();
_packageListModel = IoC.Get<PackagesListViewModel>();
}
我能,而不是創建一個使用_containersListModel =新ContainersListModel這裏新實例()。從那時起IOC獲得同樣的實例?
編輯: 我使用這裏找到引導程序:https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper
它定義了容器,我也是在類的開始標誌着我與[導出(typeof運算(ContainersListViewModel))]的ViewModels。
如果您「新建」了一個新實例,IoC容器將不會有任何知識,除非您添加(或更改)其中一個綁定。另外,取決於綁定,您可能會每次調用IoC.Get()或新的實例(單例),這取決於實現的綁定方式。 1)你在DI容器中使用什麼(例如Caliburn.Micro的SimpleContainer或其他)? 2)你如何創建容器的綁定(或者你讓它「自動」解析)? – Steve
另外,你說你想「創建一組全新的視圖」 - 這與viewmodels無關。你想創建一套新的視圖模型?只要確保IoC容器沒有返回單例,然後再次調用'IoC.Get()'來獲得一個新的。 – Steve
我使用的是CM入門東西的一部分的CompositionContainer,視圖模型也標有[Export(typeof(ContainersListViewModel))]。所以要回答你的問題,我不確定它現在做什麼,這就是爲什麼我問,因爲我找不到:( – Ben