Dependency injection 更改所有绑定的默认范围";至;某一类

Dependency injection 更改所有绑定的默认范围";至;某一类,dependency-injection,ninject,Dependency Injection,Ninject,是否有任何方法可以为“到”特定类的所有绑定设置默认范围。例如,如果我有以下内容: kernel.Bind<IMyInterface1>.To<MySingletonClass>(); kernel.Bind<IMyInterface2>.To<MySingletonClass>(); kernel.Bind<IMyInterface3>.To<MySingletonClass>(); kernel.Bind<IMyIn

是否有任何方法可以为“到”特定类的所有绑定设置默认范围。例如,如果我有以下内容:

kernel.Bind<IMyInterface1>.To<MySingletonClass>();
kernel.Bind<IMyInterface2>.To<MySingletonClass>();
kernel.Bind<IMyInterface3>.To<MySingletonClass>();
kernel.Bind<IMyInterface4>.To<MySingletonClass>();
kernel.Bind.To();
Bind.To();
Bind.To();
Bind.To();
我希望所有这些在默认情况下都是单例作用域。默认情况下,以下所有项都是请求范围:

kernel.Bind<IMyInterface1>.To<MyClass>();
kernel.Bind<IMyInterface2>.To<MyClass>();
kernel.Bind<IMyInterface3>.To<MyClass>();
kernel.Bind<IMyInterface4>.To<MyClass>();
kernel.Bind.To();
Bind.To();
Bind.To();
Bind.To();
所有
.InXXXScope()
方法归结为
InScope(回调)
方法。或者,您可以创建一个扩展方法,根据参数执行其中一个操作

在做类似的事情时,Ninject.Extensions.Conventions可能很有用(它有绑定多个接口和/或所有接口的示例)


最重要的是,不要在测试中使用Ninject。我认为如果你需要像这样进行大量的布线来实现这样一个重要的切换,那么你就缺少了一个抽象概念。也许AutoFixture或类似工具在您的环境中起到了一定的作用?

您想解决什么问题?我使用DI在本地调试中运行时使用内存中的数据存储,然后使用EF连接到生产中的SQL数据库。我不希望我的EF上下文是单例的,但每个请求的内存存储是非常无用的:)我意识到我可以在第一个示例中的所有四行中添加.InSingletonScope(),但我只是想知道是否有更干净的东西。以前没有听说过AutoFixture,但我必须检查一下。谢谢