回答

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即可。要引用MainViewModelDataContext只需添加以下到您的視圖:

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

你可以看到,這臺DataContextViewModelLocator類的MainViewModel特性,它採用Autofac用來創建MainViewModel實例依賴注入。

您可以在這裏找到來源:https://github.com/ErikSchierboom/autofacwp8dependencyinjectiondemo.git

+0

這是最好的地方,把這個IOC Autofac配置在Windows Phone 8的應用程序就像是哪個事件(啓動或活動)。我在想的是我們可以將這些東西放入Launch中。是不是?或者我需要一些代碼升級。 –

+0

發射會很好。 –

+0

只是想確定它是否會在應用程序來自Tomb-stoned/dormant狀態時創建任何問題? –

相關問題