Dependency injection 当存在条件注册时,如何在Simple Injector中交换依赖项以进行集成测试

Dependency injection 当存在条件注册时,如何在Simple Injector中交换依赖项以进行集成测试,dependency-injection,asp.net-core-3.1,simple-injector,.net-core-3.1,.net-framework-4.8,Dependency Injection,Asp.net Core 3.1,Simple Injector,.net Core 3.1,.net Framework 4.8,我们正在设置集成测试,并希望能够将一些实际实现替换为存根。这似乎是可能的,但我们也有条件注册 设置container.Options.AllowOverridingRegistrations=true不能与条件注册结合使用 附近有工作吗 澄清:我们想要覆盖的注册最好不是有条件的,但是有任何有条件的注册都不允许设置container.Options。允许覆盖注册为true您看到的是简单注入器中的一个限制是的,这会起作用,但这里还有一个更大的问题:AllowOverridingRegistratio

我们正在设置集成测试,并希望能够将一些实际实现替换为存根。这似乎是可能的,但我们也有条件注册

设置
container.Options.AllowOverridingRegistrations=true不能与条件注册结合使用

附近有工作吗


澄清:我们想要覆盖的注册最好不是有条件的,但是有任何有条件的注册都不允许设置
container.Options。允许覆盖注册
true

您看到的是简单注入器中的一个限制是的,这会起作用,但这里还有一个更大的问题:
AllowOverridingRegistrations
甚至不能设置为
true
,如果存在任何条件注册。即使我没有覆盖其中任何一个,但仍然会弹出异常,因为某些注册是有条件的。这不是
AllowOverridingRegistrations
的设置方式。也许您遇到了一个bug(在旧版本中),但我刚刚用5.0.3进行了验证,并且可以使用
AllowOverridingRegistrations
覆盖(无条件)注册,即使存在条件注册(用于不相关的抽象)。此项目使用
SimpleInjector 4.10.2
。我们还没有完全准备好切换到5.0。明天我将进一步调查。我刚刚用版本4.10.2、4.9.2、4.8.1和4.7.1测试了这一点,它们似乎都能工作。可能是您遇到了一个紧急情况,或者有了一个不同的用例,然后我正在进行测试。如果您有一个复制,您可以将其发布到GitHub。我非常有兴趣看到它。从Simple Injector 5.0.4开始,该行为已经修改:在特定情况下,现在允许注册条件。看见