所以,我有一个IConnectionFactory
接口,由NMSConnectionFactory
类实现,其构造函数如下所示:
public NMSConnectionFactory(string providerURI, params object[] constructorParams)
我需要按需创建这些,providerURI
只能在运行时知道。
所以我正在尝试使用基于委托的工厂为我创建IConnectionFactory
(让我们称之为connectionFactoryProvider
)。
阅读完Castle文档后,我试过这个: 我的其他类的构造函数依赖于这个工厂:
public ActiveMqSessionPool(Func<string, IConnectionFactory> connectionFactoryProvider)
{...}
在这个构造函数中,我使用提供程序来创建IConnectionFactory
s:
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>();
我是否需要配置其他内容?我在这里缺少什么?
答案 0 :(得分:2)
你的NMSConnectionFactory的构造函数有签名(string,object []),所以你的工厂方法需要和我想的一样。
尝试更改:
public ActiveMqSessionPool(Func<string, IConnectionFactory> connectionFactoryProvider)
为:
public ActiveMqSessionPool(Func<string, object[], IConnectionFactory> connectionFactoryProvider