我希望能够使用 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/