2016-08-10 3 views

ответ

1

Вы можете сделать 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 (тот, который поставляется с Caliburn Micro) здесь. Он должен работать с другими контейнерами DI.

+0

Thanks Doom5. Это похоже на хорошее решение. Это может стать немного тяжелым, если мой дирижер проводит огромное количество просмотров. Загрузка их впереди. Но я думаю, что это компромисс. В любом случае, даже если у Caliburn.Micro был DI-крючок, который работал для инъекции в ActivateItem, он больше всего хотел бы сделать местоположение службы в фоновом режиме. Я уверен, что Марк Seemann, вероятно, имеет сильное представление по этому вопросу :) – onefootswill

Смежные вопросы