SimpleInjector条件注入假设我有两个controller:ControllerA和ControllerB。两个控制器都接受一个参数IFooInterface。现在我有2个IFooInterface实现,FooA和FooB。我想在ControllerA中注入FooA,在ControllerB中注入FooB。这在Ninject中很容易做到,但由于性能更好,我正在转向SimpleInjector。那么如何在SimpleInjector中执行此操作?请注意,ControllerA和ControllerB位于不同的程序集中并且是动态加载的。感谢SimpleInjector文档调用了这个基于上下文的注入。从版本3开始,您将使用RegisterConditional。从2.8版开始,此功能未在SimpleInjector中实现,但文档包含一个实现此功能的工作代码示例,作为Container类的扩展。使用这些扩展方法,您可以执行如下操作:TypefooAType=Assembly.LoadFrom(@"pathtofooA.dll").GetType("FooA");输入fooBType=Assembly.LoadFrom(@"pathtofooB.dll").GetType("FooB");container.RegisterWithContext(context=>{if(context.ImplementationType.Name=="ControllerA"){returncontainer.GetInstance(fooAType);}elseif(context.ImplementationType.Name=="ControllerB"){returncontainer.GetInstance(fooBType)}else{返回null;}});由于SimpleInjectorversion3有RegisterConditional方法,以上是C#学习教程:SimpleInjectorConditionalInjection。需要了解更多C#学习教程,希望大家多多关注—container.RegisterConditional(c=>c.Consumer.ImplementationType==typeof(ControllerA));container.RegisterConditional(c=>c.Consumer.ImplementationType==typeof(ControllerB));container.RegisterConditional(c=>!c.Handled);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
