1

Service Stack サービスでサービス操作を呼び出すために Redis を使用したいと考えています。

メッセージ要求として単純な 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();
            })
        );
4

2 に答える 2

1

これは、使用しているコンテナの問題のようです。なぜこれを求めているのかわかりません。IOC の自動ブートストラップ スキャン プロセスに関係している可能性がありますが、解決したいものではありません。 IOC。調査に役立つように、RegisterHandlerコールバックのタイプは次のIMessage<T>とおりです。

messageService.RegisterHandler<SubscribeAddressRequest>(x // <- IMessage<T>
于 2013-09-27T16:49:48.353 に答える
1

この問題の原因は、私の IoC コンテナー (Castle Windsor) がコンテナーから IMessage を解決する目的で動的 Func を使用して RedisMqServer に RequestFilter と ResponseFilter を注入していることです (TypedFactoryFacility を使用している場合)。

これは、TypedFactoryFacility の一部であるデリゲート ファクトリが原因です (私は通常、インターフェイス ファクトリを使用します)。

型指定されたファクトリ機能を使用するときに、Castle Windsor デリゲート ファクトリの自動有効化を無効にすることで、これを回避しました。

Castle Windsor 3 のコンポーネントを削除する

于 2013-10-01T13:41:12.953 に答える