我正在更換MVVM Light默認SimpleIOC與Autofac。到目前爲止這麼好,但現在我試圖初始化一個ViewModel的應用程序開始,因爲我需要登記一些調用MessengerInstance
,與SimpleIOC這很容易SimpleIoc.Default.Register<MyViewModel>(true);
,但我無法找到與Autofac的方式。立即使用Autofac創建ViewModel實例
我想containerBuilder.RegisterType<MyViewModel>().AutoActivate();
初始化視圖模型,但隨後它沒有註冊,當我需要它綁定:
containerBuilder.RegisterType<MyViewModel>().AutoActivate();
...
public MyViewModel MyVM
{
get { return this.container.Resolve<MyViewModel >(); } //<- Boom! ComponentNotRegisteredException!!
}
編輯
的問題是,我想要的視圖模型來我前被激活解決它,因爲我在那裏註冊一條消息:
public MyViewModel()
{
MessengerInstance.Register<bool>(this,(b) => DoThisAction(b));
}
如果ViewModel不是r在這一點上egistered將丟失的消息:
//MyView is binded to MyViewModel
NavigationService.NavigateTo("MyView);
MessengerInstance.Send<bool>(true);
我不明白這個問題。你爲什麼使用'AutoActivate'?我想你只需要將實例註冊爲常規註冊並解決它。 – 2014-10-29 15:20:58
但是,如果您的視圖綁定到您的ViewModel,這是不是意味着只要您導航到視圖,VM上的ctor就會被調用,此時MessengerInstance將知道如何處理髮送的消息? – Darek 2014-10-29 16:20:14
@Darek導航是異步的 – 2014-10-29 16:47:49