2013-09-22 4 views
1

Ninject로 WPF 애플리케이션을 개발하면서 분석 한 코드에는 한 번만 있어야하는 컬렉션이 있습니다.컬렉션을 Ninject에 바인딩합니다.

예를 들어, 메인 윈도우는 브라우저의 탭과 같은 프로젝트 탭의 내부 목록으로 구성됩니다. 메인 윈도우의 뷰 모델은이 프로퍼티 ObservableCollection<ProjectViewModel>을 포함하고 있습니다. 내 생각은 ProjectViewModel의 ObservableCollection이 하나뿐입니다. Ninject와 싱글 톤 같은 타입을 바인딩하면 어떻게됩니까?

그래서 나는 ...

if (ViewModelBase.IsInDesignModeStatic) //pure WPF design mode check looks 
             //differently (this is MVVM Light) 
{ 
    kernel.Bind<ObservableCollection<Project>>().ToMethod((c) => 
    { 
     return new ObservableCollection<Project>() { new Project("Lorem", "Ipsum") }; 
    } 
} 
else 
{ 
    kernel.Bind<ObservableCollection<Project>>() 
      //.ToSelf() <-- ToSelf() does not work 
      .ToMethod((c) => 
      { 
       return new ObservableCollection<Project>(); 
      }).InSingletonScope(); 
} 

을 이런 식으로 뭔가를 썼다 그리고 그것은 작품! 디자인 모드에서 실제로 "Lorem"과 "Ipsum"을보고 실행 중일 때 코드는 기본보기 모델의 컬렉션이 비어있는 상태에서 예상대로 작동하는 것 같습니다. 그리고 코드는 꽤 멋지고 읽기 쉽습니다.

하지만 의심스럽고 의심 스럽습니다. 클래스 컬렉션이 특정 구현에 바인딩되어있는 유사한 코드의 예를 찾을 수 없어서 정말 더럽고 나쁜 것을하고 있다고 느낍니다. 그러나 나는 충분히 조사하지 않았을지도 모른다.

Ninject에서 일부 클래스의 컬렉션을 바인딩하는 것이 좋습니까? 예기치 않은 문제가 발생할 수 있습니까?

+0

'IsInDesignModeStatic' huh? * 정적? * 실제로 정적이라는 것을 나타 내기 위해 "정적"이라는 단어를 정적 메서드 이름에 넣지 않았습니까? – Will

+0

MVVM Light 속성입니다. – Mirek

+0

. 내 말은, 진지하게. – Will

답변

0

나는 그것이 너무 더러운 것처럼 느껴지지 않습니다. 이것은 부트 스트 래퍼 (bootstrapper)에 모두 보관되므로 쉽게 볼 수 있으며 동작이 무엇인지 볼 수 있습니다. 카펫 아래의 모든 제어 상태를 밀어내어 코드의 다른 부분을 깨끗하게 유지합니다.