gpt4 book ai didi

c# - SimpleInjector container.RegisterSingleOpenGeneric 不返回相同的实例

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:20 25 4
gpt4 key购买 nike

我已经注册了一个“开放通用类型”,如下所示:

_container.RegisterSingleOpenGeneric(
typeof(StandardCacheItemByKeyRetriever<>),
typeof(StandardCacheItemByKeyRetriever<>));

然后我尝试按照以下方式检索实例两次:

var t1 = _container.GetInstance<StandardCacheItemByKeyRetriever<SettingData>>();
var t2 = _container.GetInstance<StandardCacheItemByKeyRetriever<SettingData>>();

考虑到我正在使用 RegisterSingleOpenGenerict1 不应该等于 t2 吗?

在下面,b 等于 false - 如果相同,则应该为 true,对吗?

bool b = t1 == t2;

最佳答案

更新:这是一个错误,现已在 Simple Injector 2.2 中修复.

不幸的是,您偶然发现了 Simple Injector 中的错误。 RegisterSingleOpenGeneric 不能正确处理您的情况(服务类型等于实现类型)。这导致注册被完全跳过,使容器退回到其默认行为,即创建具有 transient 生活方式的具体类型。

我们说话的时候我正在修复错误。很快就会有新版本 (2.2)。我会在发布时更新此答案。

同时,作为变通方法,您可以通过接口(interface)注册类型,例如:

_container.RegisterSingleOpenGeneric(
typeof(ICacheItemByKeyRetriever<>),
typeof(StandardCacheItemByKeyRetriever<>));

另一种解决方法(不太令人愉快)是手动进行所有注册:

_container.RegisterSingle<StandardCacheItemByKeyRetriever<SettingData>>();
_container.RegisterSingle<StandardCacheItemByKeyRetriever<SomeData>>();
_container.RegisterSingle<StandardCacheItemByKeyRetriever<OtherData>>();
// etc

很抱歉你偶然发现了这个。

关于c# - SimpleInjector container.RegisterSingleOpenGeneric 不返回相同的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15883069/

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