gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:56:56 25 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/

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