【发布时间】:2012-11-30 04:30:51
【问题描述】:
我希望能够使用 Autofac 作为我的 IoC 容器将 ViewModel 注入到我的 Windows Phone 8 应用程序的视图中。我该怎么做呢?我看过 Caliburn.Micro 框架,但我想使用更简单的。
【问题讨论】:
标签: dependency-injection viewmodel windows-phone-8 viewmodellocator
我希望能够使用 Autofac 作为我的 IoC 容器将 ViewModel 注入到我的 Windows Phone 8 应用程序的视图中。我该怎么做呢?我看过 Caliburn.Micro 框架,但我想使用更简单的。
【问题讨论】:
标签: dependency-injection viewmodel windows-phone-8 viewmodellocator
正是为了这个目的,我创建了一个小型演示应用程序。它定义了一个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
【讨论】: