네, 조금 더 나은 것을 할 수 있다고 생각합니다.
주문형 요구 사항이 없다면 객체 모델의 루트 (ShellViewModel
)에 도달 할 때까지 해당 뷰 모델을 MenuViewModel
등의 종속성으로 만들 수 있고 컨테이너가 연결됩니다 모든 것.
종속성 자체를 위해 MenuViewModel
종속성을 구성 할 수있는 것을 대체하여 개체 그래프에 "방화벽"을 넣을 수 있습니다. 컨테이너는이 직업에 대한 분명한 선택이며 IMHO는 실용적인 관점에서 보면 이것이 순수하지 않더라도 충분한 솔루션입니다.
하지만 컨테이너 대신 공장 인을 사용할 수도 있습니다. 이 팩토리는 컨테이너에 대한 종속성을 취하고 실제 종속성에 대한 읽기 전용 특성을 제공합니다 (MenuViewModel
). 속성에 액세스하면 컨테이너가 객체를 확인하고 반환하게됩니다 (접근 자 메서드는 속성 대신 작동 할 것이므로 다른 토론이 전체적으로 유용하므로 더 나은 것으로 생각하는 것을 사용하십시오).
실제 상태를 변경하지 않은 것처럼 보일 수도 있지만 MenuViewModel
이 컨테이너에 직접 종속 된 경우 상황은 동일하지 않습니다. 지금은 훨씬 더 유익
interface IMenuViewModelDependencyFactory
{
public RealDependencyA { get; }
public RealDependencyB { get; }
}
같은에 대한 종속성이 있다고 볼 것입니다 동안이 경우 당신은 MenuViewModel
의 실제 의존성이 공용 인터페이스를 보면 어떤 생각이 없을 것이다. 당신은 콘크리트 MenuViewModelDependencyFactory
사물의 공용 인터페이스를 보면 또한 훨씬 더 있습니다
class MenuViewModelDependencyFactory : IMenuViewModelDependencyFactory
{
private Container container;
public MenuViewModelDependencyFactory(Container container) { ... }
public RealDependencyA { get { ... } }
public RealDependencyB { get { ... } }
}
이
MenuViewModelDependencyFactory
이 너무 매우 고도의 전문이기 때문에 여기에 컨테이너와 함께 할 예정 어떤 이상 혼동이 없어야합니다.
출처
2012-05-06 23:23:30
Jon
이전에이 팩토리 유형의 접근 방식을 이미 보았지만 실제로 인터페이스에서 의존성을 지정하는 것은 아니 었습니다. – diggingforfire