2013-09-27 5 views
1

서비스 스택 서비스에서 Redis를 사용하여 서비스 작업을 호출하고 싶습니다.ServiceStack Redis Messaging - IMessage?

라는 메시지 요청으로 간단한 DTO를 만든 및 데모 페이지에 따라 메시지 서비스 등록하고

:

 var messageService = m_Container.Resolve<RedisMqServer>(); 
     messageService.RegisterHandler<SubscribeAddressRequest>(x => ServiceController.ExecuteMessage(x)); 
     messageService.Start(); 

ServiceStack 실제로이 메시지를 수신,하지만 내 컨테이너에서 (다음과 같은 오류가)

No component for supporting the service ServiceStack.Messaging.IMessage was found. 

이 이유는 ServiceStack하여 iMessage로 주입하도록 의존성을 요구하고, 매우 홀수? IMessage에 대한 공급자를 등록하지 않았으므로 이것이 실패 할 것이라는 것을 이해했지만 공급자가 보이지 않습니다. 나는 다음과 같은 유형을 등록하고 있습니다 :

그것은 다음과 같습니다
 string[] RedisHosts = new string[] { (string)ConfigurationManager.AppSettings["RedisHost"] }; 
     container.Register(
      Component.For<IRedisClientsManager>().ImplementedBy<PooledRedisClientManager>().DependsOn(new { poolSize = 1000, poolTimeOutSeconds = 1, readWriteHosts = RedisHosts }), 
      Component.For<RedisMqServer>(), 
      Component.For<IMessageQueueClient>().UsingFactoryMethod((k, c) => 
      { 
       return k.Resolve<RedisMqServer>().CreateMessageQueueClient(); 
      }) 
     ); 

답변

1

나는 나의 IOC의 컨테이너 (성 윈저)가 RequestFilter 주입되어있는 문제의 원인을, 발견 (TypedFactoryFacility를 사용하는 경우) 컨테이너에서 IMessage를 해결하기위한 목적으로 동적 Func을 사용하는 RedisMqServer의 ResponseFilter.

이것은 TypedFactoryFacility의 일부인 delegate-factory (보통 인터페이스 팩토리를 사용함) 때문입니다.

나는 형식화 된 공장 시설 사용시 성 윈저 위임 공장의 수 있도록 자동을 사용하지 않도록 설정하여이 라운드 가지고 : 나는 문제의 원인을 발견

Remove components in Castle Windsor 3

1

가 사용중인 컨테이너에 문제가있다, 나는 그것이이 요구 왜 확실하지 않다, 그것은 당신의 IOC의 자동차 함께 할 수있는 뭔가가있을 수 있습니다 부트 스트랩 스캐닝 프로세스가 필요하지만 IOC에서 해결하고자하는 것은 아닙니다. 조사에 도움이되도록 RegisterHandler 콜백의 유형은 예를 들어, IMessage<T>이다 :

messageService.RegisterHandler<SubscribeAddressRequest>(x // <- IMessage<T> 
+0

이라고 내 IOC의 컨테이너 (Castle Windsor)는 (TypedFactoryFacility를 사용할 때) 컨테이너로부터 IMessage를 해결할 목적으로 RedisMqServer에 RequestFilter 및 ResponseFilter에 동적 Func를 주입하고 있습니다. IMessage를 등록하지 않은 이유는 모르겠습니다. 이제 캐슬 윈저 3에서 어려운 대리인 - 공장을 비활성화해야합니다. http://stackoverflow.com/questions/19115475/remove-components-in-castle-windsor-3 – James

+0

나는 그것을 얻을 수 있다고 생각합니다. 전달 된 메시지를 반환하는 Container에 Func을 추가하지만 이것은 DelegateFactory를 제거하는 나쁜 해결 방법입니다. – James

관련 문제