2016-08-10 5 views
1

MVVM LightのViewModelLocatorのコンストラクタとメンバーが静的でないのはなぜですか?私はこのようなコンストラクタでIOCの登録プロセスを実行することを考慮すると:ViewModelLocatorメンバーが静的でない理由

SimpleIoc.Default.Register<MainWindowVM>(); 

これは私がビュー(XAML)でそれを使用するたびに意味し、それはViewModelLocatorの新しいインスタンスを作成し、これ以上、私のクラスを登録し、終わった?

さらにコード内でアクセスする必要がある場合はどうすればよいですか?どの場所にもViewModelLocatorのインスタンスを作成する必要がありますか?

+0

ではありませんあなたはApp.xamlがあなたのグローバルインスタンスを登録するためですそれはシングルトンですか? –

+0

@MikeEason:いいえ、5.3現在。 – dotNET

+1

それは彼らがそれを実装した方法なので。人々が静的から離れている理由はたくさんあります。テスト作業を容易にするためにデカップリングを行うことが大きな課題です。本当に知りたければ、MVVM Lightの開発者に尋ねる必要があります。 – Will

答えて

1

MVVMLightのViewModelLocatorは静的でもシングルトンでもありません。この時点で

<Application x:Class="Project.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      d1p1:Ignorable="d" 
      xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:vm="clr-namespace:Acoustix.ViewModel"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

ViewModelLocatorクラスのコンストラクタが呼び出されると、あなたのビューでインスタンスを使用することができます:

<Window x:Class="Project.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:system="clr-namespace:System;assembly=mscorlib" 
     DataContext="{Binding Main, Source={StaticResource Locator}}" Icon="Assets/app.ico"> 
    <!-- ... --> 
</Window> 
関連する問題