C# simpleinjector 3.0不支持RegisterManyForOpenGeneric

C# simpleinjector 3.0不支持RegisterManyForOpenGeneric,c#,simple-injector,C#,Simple Injector,所以我决定将我的simpleinjector版本升级到3.0,突然我得到一个信息: 'SimpleInjector.Extensions.OpenGenericBatchRegistrationExtensions.RegisterManyForOpenGeneric(SimpleInjector.Container,System.Type,params System.Reflection.Assembly[])已过时:'此扩展方法已删除。请使用容器。请改为注册(类型,IEnumerable)

所以我决定将我的simpleinjector版本升级到3.0,突然我得到一个信息:

'SimpleInjector.Extensions.OpenGenericBatchRegistrationExtensions.RegisterManyForOpenGeneric(SimpleInjector.Container,System.Type,params System.Reflection.Assembly[])已过时:'此扩展方法已删除。请使用容器。请改为注册(类型,IEnumerable)

文档中仍有此方法:

所以我很好奇,除了:

container.RegisterManyForOpenGeneric(typeof(IEventHandler<>),
                                     container.RegisterAll,
                                     typeof(IEventHandler<>).Assembly);
container.RegisterManyForOpenGeneric(typeof(IEventHandler),
容器注册,
类型(IEventHandler)。组件;

啊。。在搔了几个小时的头后,我发现:

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

因为我们注册了一个集合,所以不能再调用container.GetInstance>()。相反,可以通过使用IEnumerable>构造函数参数或调用container.GetAllInstances>()来检索实例


我没有做过,也不需要做,因为我没有混合开放泛型和非泛型。但是如果我想改进我的项目,我会在将来进一步探讨这个问题。

最新版本的文档仍然指向2.8(当然这是错误的)。如果你看一下,你会看到新的文档。这不是你在问题中显示的代码的编译器消息。实际的编译器错误是:“此扩展方法已被删除。请改用Container.RegisterCollection(类型,IEnumerable)。”。这个信息非常清楚。您可能看到了错误的编译器错误?不完全是,它是直接复制和粘贴的。我刚刚取消了RegisterManyForOpenGeneric前面的语句的注释,只是为了确认这一点,我发布的错误是正确的,它说的是Register,而不是RegisterCollection。这很奇怪。我复制粘贴了您的代码,并在我的机器上显示上面的错误消息。我不确定这是怎么发生的。我同意你得到的信息令人困惑。很抱歉给您添麻烦。@Steven事实上,注册表是正确的,我在下面更新了我的答案。这解决了我的问题。RegisterCollection会让我进一步更改代码的配置。我不知道我需要在第二个参数中添加新的[]。文档解释了一切,谢谢!当你是一个早期的适应者时,这就是你得到的。文档是在我们讲话时生成的。它将在几分钟内更新。文档解释了很多,谢谢。。我更新了我的答案
container.RegisterCollection(typeof(IEventHandler<>),
                             typeof(IEventHandler<>).Assembly);
container.Register(typeof(IEventHandler<>),
                   new[] { typeof(IEventHandler<>).Assembly });