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>