서비스 스택 서비스에서 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();
})
);
이라고 내 IOC의 컨테이너 (Castle Windsor)는 (TypedFactoryFacility를 사용할 때) 컨테이너로부터 IMessage를 해결할 목적으로 RedisMqServer에 RequestFilter 및 ResponseFilter에 동적 Func를 주입하고 있습니다. IMessage를 등록하지 않은 이유는 모르겠습니다. 이제 캐슬 윈저 3에서 어려운 대리인 - 공장을 비활성화해야합니다. http://stackoverflow.com/questions/19115475/remove-components-in-castle-windsor-3 – James
나는 그것을 얻을 수 있다고 생각합니다. 전달 된 메시지를 반환하는 Container에 Func을 추가하지만 이것은 DelegateFactory를 제거하는 나쁜 해결 방법입니다. – James