gpt4 book ai didi

c# - simpleinjector 3.0 不支持 RegisterManyForOpenGeneric

转载 作者:太空狗 更新时间:2023-10-29 22:58:11 25 4
gpt4 key购买 nike

所以我决定将我的 simpleinjector 版本升级到 3.0,突然我收到一条消息:

'SimpleInjector.Extensions.OpenGenericBatchRegistrationExtensions.RegisterManyForOpenGeneric(SimpleInjector.Container, System.Type, params System.Reflection.Assembly[])' is obsolete: 'This extension method has been removed. Please use Container.Register(Type, IEnumerable) instead.

文档中仍然有这个方法:

http://simpleinjector.readthedocs.org/en/latest/advanced.html

所以我很好奇,有什么替代方案:

container.RegisterManyForOpenGeneric(typeof(IEventHandler<>),
container.RegisterAll,
typeof(IEventHandler<>).Assembly);

最佳答案

啊..挠了我几个小时的脑袋,我想通了:

container.RegisterCollection(typeof(IEventHandler<>),
typeof(IEventHandler<>).Assembly);

RegisterCollection 也处理开放泛型。也许这应该记录在某处。

编辑:

我在新文档中意识到,上面的代码不是从 RegisterManyForOpenGeneric 直接翻译过来的。它所做的只是解决了我的编译,但它没有注册我的处理程序,我今天才检查过。

附加信息:类型没有注册

这是正确的版本:

container.Register(typeof(IEventHandler<>),
new[] { typeof(IEventHandler<>).Assembly });

使用 RegisterCollection 需要一些额外的代码更改(来自文档):

Because we register a collection, we can no longer call container.GetInstance>(). Instead instances can be retrieved by having an IEnumerable> constructor argument or by calling container.GetAllInstances>().

我没有做过,也不需要做,因为我没有混合开放通用和非通用。但如果我想改进我的项目,我会在未来对此进行更多探索。

关于c# - simpleinjector 3.0 不支持 RegisterManyForOpenGeneric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082996/

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