0
是否有這樣做比這更好的辦法?:使用Caliburn.Micro進行導航的構造函數DI可能嗎?
ActivateItem(Ioc.Get<PageOneViewModel>());
我不是Service Locator模式的忠實粉絲。是否有任何其他DI鉤可用於此類導航?
是否有這樣做比這更好的辦法?:使用Caliburn.Micro進行導航的構造函數DI可能嗎?
ActivateItem(Ioc.Get<PageOneViewModel>());
我不是Service Locator模式的忠實粉絲。是否有任何其他DI鉤可用於此類導航?
您可以讓PageOneViewModel
成爲您的售票員的依賴關係(假設您的售票員正在通過容器解決)。
在你的應用程序引導程序,註冊PageOneViewModel
:
container = new SimpleContainer();
//...
container
.PerRequest<MyViewModel>()
.PerRequest<PageOneViewModel()>;
而在你的指揮:
public MyViewModel : Conductor
{
// require PageOneViewModel as a dependency
public MyViewModel(PageOneViewModel pageOne)
{
PageOne = pageOne;
}
PageOneViewModel PageOne { get; set; }
public override void OnActivate()
{
base.OnActivate();
ActivateItem(PageOne);
}
}
請注意,我用的SimpleContainer
這裏(附帶微卡利的一個)。它應該與其他DI容器一起工作。
感謝Doom5。這看起來是一個好的解決方案。如果我的指揮官正在進行大量的觀看,它可能會有點沉重。預先加載它們。但我想這是權衡。無論如何,即使Caliburn.Micro確實有一個用於注入ActivateItem的DI鉤子,它最希望在後臺執行服務位置。我確信Mark Seemann可能對此事有強烈的看法:) – onefootswill