dependency-injection - 如何使用 Autofac 在 Windows Phone 8 应用程序中注入(inject) ViewModels?

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

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

最佳答案

正是出于这个目的,我创建了一个小型演示应用程序。它定义了一个 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>();
        }
    }
}

要从您的 View 中使用此类,您必须将其添加到应用程序的资源中。您可以通过修改 App.xaml 中的 Application.Resources 部分来执行此操作:

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

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

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

你可以看到它将 DataContext 设置为 ViewModelLocator 类的 MainViewModel 属性,它使用 Autofac 使用依赖注入(inject)创建 MainViewModel 实例。

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

关于dependency-injection - 如何使用 Autofac 在 Windows Phone 8 应用程序中注入(inject) ViewModels?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13840283/

相关文章:

c# - Windows Phone 8 中的自定义字体使用

dependency-injection - 我的工厂对象是否引入了全局状态?

asp.net-mvc-3 - 填充基本 View 模型的最佳方法

asp.net - ASP.NET MVC 中用于读取、创建和更新操作的单独 ViewModel

asp.net-mvc-3 - MVC3 - 使用 ViewModel 插入 - 对象引用未设置为对象的实例

windows-phone-7 - 尝试绑定(bind)独立存储镜像时应用程序崩溃

windows-phone-7 - 用于 Windows Phone 开发的 FFmpeg

c# - 如何将 ApplicationDbContext 传递给 ASP.NET MVC5 构造函数?

c# - Ninject 的装饰器模式

unit-testing - 你如何测试依赖注入(inject)?