【问题标题】:How to use Autofac to inject ViewModels in a Windows Phone 8 application?如何使用 Autofac 在 Windows Phone 8 应用程序中注入 ViewModel?
【发布时间】:2012-11-30 04:30:51
【问题描述】:

我希望能够使用 Autofac 作为我的 IoC 容器将 ViewModel 注入到我的 Windows Phone 8 应用程序的视图中。我该怎么做呢?我看过 Caliburn.Micro 框架,但我想使用更简单的。

【问题讨论】:

    标签: dependency-injection viewmodel windows-phone-8 viewmodellocator


    【解决方案1】:

    正是为了这个目的,我创建了一个小型演示应用程序。它定义了一个ViewModelLocator 类:

    public class ViewModelLocator
    {
        private readonly IContainer container;
    
        public ViewModelLocator()
        {
            var containerBuilder = new ContainerBuilder();
            containerBuilder.RegisterType<MainViewModel>();
            containerBuilder.RegisterType<ItemViewModel>();
    
            this.container = containerBuilder.Build();
        }
    
        public MainViewModel MainViewModel
        {
            get
            {
                return this.container.Resolve<MainViewModel>();
            }
        }
    
        public ItemViewModel ItemViewModel
        {
            get
            {
                return this.container.Resolve<ItemViewModel>();
            }
        }
    }
    

    要从您的视图中使用此类,您必须将其添加到应用程序的资源中。为此,您可以修改 App.xaml 中的 Application.Resources 部分:

    <Application.Resources>
        <local:ViewModelLocator xmlns:local="clr-namespace:AutofacWP8DependencyInjectionDemo" x:Key="ViewModelLocator"/>
    </Application.Resources>
    

    现在您将能够在视图中注入视图模型。只需将观点指向DataContext。要将MainViewModel 引用为DataContext,只需将以下内容添加到您的视图中:

    DataContext="{Binding Path=MainViewModel, Source={StaticResource ViewModelLocator}}"
    

    您可以看到它将DataContext 设置为ViewModelLocator 类的MainViewModel 属性,该类使用Autofac 通过依赖注入创建MainViewModel 实例。

    您可以在这里找到来源:https://github.com/ErikSchierboom/autofacwp8dependencyinjectiondemo.git

    【讨论】:

    • 这是将此 IOC Autofac 配置放入 windows Phone 8 应用程序的最佳位置,例如在哪个事件(启动或活动)上。我在想的是我们可以把这些东西放到 Launch 中。对吗?或者我需要一些代码升级。
    • 启动就好了。
    • 只是想确定当应用程序来自墓碑/休眠状态时是否会产生任何问题?
    猜你喜欢
    • 2014-10-07
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2013-01-13
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多