1

したがって、次のようなコンストラクターを持つクラスIConnectionFactoryによって実装されたインターフェイスがあります。NMSConnectionFactory

public NMSConnectionFactory(string providerURI, params object[] constructorParams)

これらはオンデマンドで作成する必要があり、providerURI実行時にのみ認識されます。だから私は私のために s を作成するデリゲートベースのファクトリを使用しようとしてIConnectionFactoryいます (それを と呼びましょうconnectionFactoryProvider)。

Castleのドキュメントを読んだ後、私はこれを試しました:私の他のクラスのコンストラクターは、このファクトリに依存しています:

public ActiveMqSessionPool(Func<string, IConnectionFactory> connectionFactoryProvider)
{...}

このコンストラクター内で、プロバイダーを使用してIConnectionFactorysを作成します。

var connectionFactory = _connectionFactoryProvider("my destination");

ただし、この最後の行を実行すると、NMSConnectionFactory がこれらの依存関係を待機していることを示すエラーが表示されます。

- Parameter 'providerURI' which was not provided. Did you forget to set the dependency?

- Service 'System.Object[]' which was not registered.

providerURINMSConnectionFactory コンストラクターに渡すにはどうすればよいですか?

これは、私のコンポーネント登録がこれまでにどのように見えるかです:

container.Register(Component.For<IConnectionFactory>()
                                    .ImplementedBy<NMSConnectionFactory>())
                 .Register(Component.For<ISessionPool>()
                                    .ImplementedBy<ActiveMqSessionPool>().LifeStyle.Transient)
                 .AddFacility<TypedFactoryFacility>();

他に何か設定する必要がありますか? ここで何が欠けていますか?

4

1 に答える 1