2010-06-03 1 views
1

형식을 지정하는 것뿐만 아니라 구성 요소에 IComponentActivator 인스턴스를 사용하려면 어떻게해야합니까? 대신에 나는 할 수 있도록하려면IComponentActivator 인스턴스

Component.For<XYZ>.Activator<MyComponentActivator>(); 

이다

는 또한

Component.For<XYZ>.Activator(new MyComponentActivator(someImportantRuntimeInfo)); 

말, '비 특별히 등록 된 구성 요소에 대한 동적 활성화를 선택할 수있는 방법은 무엇입니까? 즉, 해결할 유형을 확인하고 활성화할 수 있는지 여부를 결정하는 액티베이터를 원합니다. 그렇지 않은 경우 활성화에 대한 책임을 기본 활성화 자에게 전달해야합니다.

Create(Type type){ 
    if (ShouldActivate(type)){ 
    DoActivate(type); 
    } 
    else{ 
    // do default activation here somehow 
    } 
} 

감사 :

그래서 기본적으로 나는 다음과 같은 논리가 글로벌 IComponentActivator를 원한다!

답변

1

편집 그냥 ILazyComponentLoader


  1. 활성제가 컨테이너에 의해 인스턴스화 사용하고, 인스턴스 OOTB를 제공 할 수있는 방법은 없습니다.

정말하고 싶다면 컨테이너 자체를 확장 할 수 있다고 말하고 싶습니다.

  • 거기에서 DefaultKernel
  • 재정 CreateComponentActivator 방법
  • 에서 잘 알려진 키

  • 상속에 따라 구성 요소의 ExtendedProperties에 사용자 정의 instace 활성제를 넣어 구성 요소의 ExtendedProperties에서 활성화를 돌려

    1. 글로벌 액티베이터를 만드는 방법은 없습니다. 당신은 당신이 정말로 원한다면 구성자를 생성하는 몇 가지 맞춤형 사용자로 활성화기를 전환하는 IContributeComponentModelCreation 구현을 추가 할 수 있습니다.

그러나 가장 중요한 질문은 이것이다 :

당신이 이에 의해 달성하려고하는 무엇

? 처음에 에서이 작업을 수행하려는 이유가 무엇입니까?

+0

특히, 사용자 지정 WCF 채널 활성화자를 만들고 있습니다. 나는 WCF 설비가 요구하는대로 모든 WCF 서비스를 등록하고 싶지 않다. 오히려 나는 자신의 커스텀 액티베이터를 다음과 같이하고 싶다 : 1. 유형 (인터페이스)이 해결하려고하면 ServiceContract Attribute를 가지고 있는지 확인한다. 2. app.config 또는 ServiceReferences.ClientConfig에 일치하는 계약 이름 (속성)이있는 servicemodel 섹션에 나열된 클라이언트 끝점이 있는지 확인합니다. 3. 발견되면 ChannelFactory 을 사용하여 인스턴스화합니다. 4. 발견되지 않으면, 정기적으로 인스턴스화하십시오. 감사! – Jeff

+0

필요하다면'ILazyComponentLoader'를 사용하십시오 –

+0

Brilliant!그게 완벽하게 작동합니다, 고마워요. – Jeff

관련 문제