3

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

4

1 回答 1

4

正是为了这个目的,我创建了一个小型演示应用程序。它定义了一个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。要引用MainViewModelas,DataContext只需将以下内容添加到您的视图中:

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

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

你可以在这里找到源代码:https ://github.com/ErikSchierboom/autofacwp8dependencyinjectiondemo.git

于 2012-12-12T12:55:17.177 回答