【问题标题】:WP7 and Ninject,how to force the app to get view instances from IoC containerWP7 和 Ninject,如何强制应用从 IoC 容器中获取视图实例
【发布时间】:2012-02-16 14:35:11
【问题描述】:

我正在使用 Ninject 将视图模型实例注入到每个视图的 DataContext 属性中,以避免使用 ServiceLocator,并且按照建议 here 在 NinjectModule 中使用以下语法:

public class TestingModule : NinjectModule
{
    public override void Load()
    {
        Bind<MainPage>().ToMethod(ctx => new MainPage() { DataContext = new MainPageViewModel() }).InSingletonScope();
    }
}

如果我使用:

var x = Kernel.Get<MainPage>();

然后将x里面的DataContext属性设置为MainPageViewModel的一个实例,很好。

问题是应用程序在导航到页面或启动时没有从 DI 容器中获取视图实例,因此在设备上或内部运行应用程序时,永远不会在任何视图中设置 DataContext 属性模拟器。

有谁知道我可以如何拦截视图的创建,以便我可以强制应用从 DI 容器中检索视图实例?

【问题讨论】:

    标签: dependency-injection ninject windows-phone-7.1 windows-phone-7


    【解决方案1】:

    看看各种 MVVM 框架之一,例如 Caliburn Micro,而不是重新发明轮子。他们做得很好,在使用 IoC 容器时可以轻松地将视图和视图模型绑定在一起。

    这是一篇关于如何在 WP7 上使用 Ninject 设置 Caliburn Micro 的博文:http://devlicio.us/blogs/derik_whittaker/archive/2011/07/08/using-ninject-with-commonservicelocator-with-caliburn-micro-on-wp7.aspx

    【讨论】:

      【解决方案2】:

      您可以将此行添加到 MainPage 构造函数中:

      DataContext = Kernel.Get<MainPageViewModel>();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        相关资源
        最近更新 更多