我正在更换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