1

所以,我有一个IConnectionFactory接口,由NMSConnectionFactory类实现,构造函数如下所示:

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

我需要按需创建这些,并且providerURI只会在运行时知道。所以我试图使用一个IConnectionFactory为我创建 s 的基于委托的工厂(我们称之为 s 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.

如何将 传递providerURI给 NMSConnectionFactory 构造函数?

这是我的组件注册到目前为止的样子:

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

我需要配置其他东西吗?我在这里想念什么?

4

1 回答 1

2

您的 NMSConnectionFactory 的构造函数具有签名(字符串,对象 []),因此您的工厂方法需要与我认为的相同。

尝试改变:

public ActiveMqSessionPool(Func<string, IConnectionFactory> connectionFactoryProvider)

至:

public ActiveMqSessionPool(Func<string, object[], IConnectionFactory> connectionFactoryProvider
于 2013-09-30T14:18:49.650 回答