Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection WP7和Ninject,如何强制应用程序从IoC容器获取视图实例_Dependency Injection_Ninject_Windows Phone 7.1_Windows Phone 7 - Fatal编程技术网

Dependency injection WP7和Ninject,如何强制应用程序从IoC容器获取视图实例

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将视图模型实例注入到每个视图的DataContext属性中,以避免使用ServiceLocator,并按照建议在NinjectModule中使用以下语法:

公共类测试模块: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>();