2014-12-20 3 views
0

메서드를 사용하여 개체의 기존 인스턴스를 등록한 경우 MSDN에 따라 컨테이너에서 Resolve 또는 ResolveAll에 대한 모든 호출에 대해 동일한 인스턴스를 반환하거나 종속성 메커니즘이 인스턴스를 다른 클래스에 삽입 할 때 컨테이너를 반환합니다.프리즘을 사용하여 인터페이스 구현을 공유하는 방법은 무엇입니까?

나는 dataService 계층에 대한 프로젝트를 생성하고

container.RegisterInstance<IQuoteSource>(new IBQuoteSource()); 

내가 IQuoteSource 필요할 때마다 나는 오직 하나의 인스턴스는 응용 프로그램의 수명 동안 만들어, 기대 사용. 하지만 또 다른 프로젝트 어셈블리에서 생성자의 인터페이스를 사용할 때, happend는 또 다른 IBQuoteSource이 생성됩니다. (내가 다시 IBQuoteSource의 생성자를 볼 수 있음) 응용 프로그램간에 인터페이스의 구현을 공유하는 방법은 무엇입니까?

public ClickViewModel(IQuoteSource quoteSource) 
{ 
    this.quoteSource = quoteSource; 
    ComboItems = new List<string>() { "GTC Order", "Day Order" }; 
    SelectedComBoItem = ComboItems[1]; 
} 
+0

주입 생성자를 어떻게 등록합니까? – dymanoid

답변

0

나는 당신이 DOCO을 misinterpeted 것 같아요 - RegisterInstance을 사용하여 등록 된 인터페이스의 같은 구현이 아닌 같은 구체적인 예를을 반환된다는 것을 의미합니다. (! : 코드의 테스트되지 않은 라인 주) - 생성 된 초기 인스턴스입니다 이 효과적으로 컨테이너와 싱글 톤 패턴을 사용합니다

이 가
container.RegisterInstance<IQuoteSource>(new IBQuoteSource() 
             , new ContainerControlledLifetimeManager() 
             ); 

:

당신이 원하는 것을 얻으려면, 당신은이 ContainerControlledLifetimeManager 사용할 필요가 인터페이스가 해결 될 때마다 사용됩니다. 의 이름을 변경하는 것이 좋습니다. 인터페이스가 아닌 실제 클래스이므로 이상적으로는 클래스 이름 앞에 대문자가 붙지 않아야합니다. I

+0

이것이'ContainerControlledLifetimeManager'에 대해 확신합니까? 이것이 이것이 기본 구현이라고 생각합니다. IB는 인터렉티브 브로커의 약자 ~ – baozi

관련 문제