温莎城堡基于委托的工厂:将参数传递给构造函数

本文关键字:参数传递 构造函数 工厂 城堡 于委托 | 更新日期: 2023-09-27 18:33:23

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

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

我需要按需创建这些,并且providerURI仅在运行时已知。所以我正在尝试使用一个基于委托的工厂来为我创建IConnectionFactory(我们称之为connectionFactoryProvider)。

阅读城堡文档后,我尝试了这个:我的另一个类的构造函数依赖于这个工厂:

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

在这个构造函数中,我使用提供程序来创建IConnectionFactory如下:

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>();

我需要配置其他内容吗?我在这里错过了什么?

温莎城堡基于委托的工厂:将参数传递给构造函数

你的NMSConnectionFactory的构造函数有签名(字符串,对象[]),所以你的工厂方法需要有相同的我认为。

尝试更改:

public ActiveMqSessionPool(Func<string, IConnectionFactory> connectionFactoryProvider)

自:

public ActiveMqSessionPool(Func<string, object[], IConnectionFactory> connectionFactoryProvider