Dependency injection WP7和Ninject,如何强制应用程序从IoC容器获取视图实例
我使用Ninject将视图模型实例注入到每个视图的DataContext属性中,以避免使用ServiceLocator,并按照建议在NinjectModule中使用以下语法:Dependency injection WP7和Ninject,如何强制应用程序从IoC容器获取视图实例,dependency-injection,ninject,windows-phone-7.1,windows-phone-7,Dependency Injection,Ninject,Windows Phone 7.1,Windows Phone 7,我使用Ninject将视图模型实例注入到每个视图的DataContext属性中,以避免使用ServiceLocator,并按照建议在NinjectModule中使用以下语法: 公共类测试模块:ninject模块 { 公共覆盖无效负载() { Bind().ToMethod(ctx=>newmainpage(){DataContext=newmainpageviewmodel()}); } } 如果我使用: var x = Kernel.Get<MainPage>(); var x
公共类测试模块:ninject模块
{
公共覆盖无效负载()
{
Bind().ToMethod(ctx=>newmainpage(){DataContext=newmainpageviewmodel()});
}
}
如果我使用:
var x = Kernel.Get<MainPage>();
var x=Kernel.Get();
然后将x中的DataContext属性设置为MainPageViewModel的一个实例,这非常好
问题在于,当导航到页面或启动时,应用程序不会从DI容器获取视图实例,因此在设备上或模拟器内运行应用程序时,任何视图中都不会设置DataContext属性
有人知道我如何拦截视图的创建,从而强制应用程序从DI容器检索视图实例吗?看看各种MVVM框架,比如Caliburn Micro,而不是重新发明轮子。他们在使用IoC容器时,很容易将视图和视图模型绑定在一起
以下是一篇关于如何在WP7上使用Ninject设置Caliburn Micro的博文:您可以将这一行添加到主页构造函数中:
DataContext = Kernel.Get<MainPageViewModel>();
DataContext=Kernel.Get();
DataContext = Kernel.Get<MainPageViewModel>();