gpt4 book ai didi

c# - CaSTLe Windsor 生活方式取决于构造函数参数

转载 作者:行者123 更新时间:2023-12-02 04:58:08 26 4
gpt4 key购买 nike

我正在使用 CaSTLe Windsor 作为 IoC 容器,我想根据另一个对象解析一个对象:

public MyService : IService
{
public MyService(MyObject obj)
{
}
}

解析为:

var service1 = container.Resolve<IService>( new { obj = obj1 });
var service2 = container.Resolve<IService>( new { obj = obj1 });

var service3 = container.Resolve<IService>( new { obj = obj2 });

我希望 service1 与 service2 相同(相同的引用),而 service3 不同。所以我需要一种不同于 Singleton 或 Transient 的生活方式。只要 obj 参数相同(通过引用),就应该返回相同的对象。

你知道如何实现吗?

最佳答案

我不知道有内置解决方案,但您始终可以创建自己的 ILifestyleManager
作为引用,您可以查看 implementation of SingletonLifestyleManager .

我从来没有真正研究过如何为 CaSTLe 制作定制的生活方式(据我所知,我们为 Unity 做过一个),但通常的想法是决定何时解析一个新实例(CreateInstance 在 CaSTLe 代码中)以及何时使用存储的值。

ConcurrentDictionary 可以在您的案例中帮助存储(虽然不知道 CaSTLe 的 burden 有什么作用,但您可能想研究一下)。如果您的 objs 是动态创建的,请当心泄漏 — 您可能对 ConditionalWeakTable 感兴趣。

注意:我同意@Steven 的观点,在你的情况下 obj 通常应该是一个参数 Create 方法,但为了完整起见,我将保留一个也可以直接回答。

关于c# - CaSTLe Windsor 生活方式取决于构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17592445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com