结构映射 -> 选择带有参数的特定构造函数
本文关键字:参数 构造函数 映射 选择 结构 | 更新日期: 2023-09-27 18:35:52
我正在尝试使用结构映射来获取StackExchangeRedisCacheCacheClient的实例 https://github.com/imperugo/StackExchange.Redis.Extensions/blob/master/src/StackExchange.Redis.Extensions.Core/StackExchangeRedisCacheClient.cs
我看到过其他问题,这些问题询问指定无参数构造函数而不是带参数的构造函数。但是,我想指定一个具有参数的特定构造函数。
我找不到任何这样的例子。
我想使用此构造函数:
public StackExchangeRedisCacheClient(ISerializer serializer, IRedisCachingConfiguration configuration = null)
我希望 StructureMap 获取 ISerializer 的实例,并为 IRedisCachingConfiguration 提供一个 null。 我该怎么做?
我想做类似的事情,但它不起作用:
For<ISerializer>().Singleton().Use<JilSerializer>().SelectConstructor(() => new JilSerializer());
For<ICacheClient>().Singleton().Use<StackExchangeRedisCacheClient>().SelectConstructor(() => new StackExchangeRedisCacheClient(GetInstance<ISerializer>, null));
如果使用返回 IRedisCachingConfiguration 的空实例的工厂函数配置容器,则它应该可以工作。 实际实例不需要在 SelectConstructor 表达式中解析,因为这仅用于匹配构造函数,因此为 null。
For<ISerializer>().Singleton().Use<JilSerializer>();
For<IRedisCachingConfiguration>().Singleton()
.Use("null config", () => (IRedisCachingConfiguration)null);
For<ICacheClient>().Singleton()
.Use<StackExchangeRedisCacheClient>()
.SelectConstructor(() => new StackExchangeRedisCacheClient(
(ISerializer)null,
(IRedisCachingConfiguration)null));
或者另一种方法是为您的 ICacheClient 配置工厂函数,并简单地调用您想要的构造函数,而无需配置空IRedisCachingConfiguration
。
For<ICacheClient>().Singleton().Use(c =>
new StackExchangeRedisCacheClient(c.GetInstance<ISerializer>(), null));