0

MVVMLight의 기본 템플릿 (ViewModelLocator.cs)의 코드 세그먼트입니다. 단순화를 위해 일부 부품을 제거했습니다.MVVMLight에서 SimpleIoC를 사용하면 어떤 이점이 있습니까?

public class ViewModelLocator 
{ 
    static ViewModelLocator() 
    { 
     ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 

     if (ViewModelBase.IsInDesignModeStatic) 
     { 
      SimpleIoc.Default.Register<IDataService, DesignDataService>(); 
     } 
     else 
     { 
      SimpleIoc.Default.Register<IDataService, DataService>(); 
     } 

     SimpleIoc.Default.Register<MainViewModel>(); 
    } 

    public MainViewModel Main 
    { 
     get 
     { 
      return ServiceLocator.Current.GetInstance<MainViewModel>(); 
     } 
    } 
} 

지금이 SimpleIoC를 사용하지 않고 내 자신의 버전이며 첫 번째 버전 (적어도 내 자신의 관찰에서)로 같은을하고있다. 제 생각에는

public class ViewModelLocator 
{ 
    static ViewModelLocator() { } 

    public MainViewModel Main 
    { 
     get 
     { 
      if(ViewModelBase.IsInDesignModeStatic) 
       return new MainViewModel(new DesignDataService()); 
      else 
       return new MainViewModel(new DataService()); 
     } 
    } 
} 

는, 두 번째 버전은를 이해하기 쉽고 분명 짧은 입니다. 물론 첫 번째 예에서는 MainViewModel의 인스턴스가 하나만 만들어집니다 (이 패턴은 싱글 톤 패턴이라고합니다).하지만 SimpleIoC 클래스를 사용하지 않고도 구현할 수 있다고 생각합니다. 내 질문에 SimpleIoc 클래스를 사용하여 클래스/개체 "등록"의 이점은 무엇입니까? 나에게 설명해주십시오.

+0

제 5 차 최저 가격. – Karolis

+0

@ KarolisKajėnas 당신의 요점은 확실하지 않습니다. 두 예제 모두 종속성 삽입을 보여 주며 질문은 그와 같이 태그가 지정됩니다. –

+0

@ KarolisKajėnas : 그것에 관해 읽을 것입니다. 그 원리에 대해 처음 들었습니다. – someone

답변

1

두 가지 모두 종속성 주입의 예이지만 하나는 컨테이너를 사용하고 하나는 명시 적입니다. 때로 '불쌍한 사람의 DI'또는 '순수한 DI'라고도합니다.

나는이 간단한 예제에서 명시적인 방법이 덜 복잡하고 아마 내가 선택한 것이라고 동의 할 것입니다.

DI 컨테이너를 사용할 때 Mark Seeman's blog post이 유용 할 수 있습니다.

관련 문제