2013-05-02 48 views
0

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

kernel.Bind<IMyInterface1>.To<MySingletonClass>(); 
kernel.Bind<IMyInterface2>.To<MySingletonClass>(); 
kernel.Bind<IMyInterface3>.To<MySingletonClass>(); 
kernel.Bind<IMyInterface4>.To<MySingletonClass>(); 

我想所有这些默认情况下单身作用域。和所有的默认作用域以下是要求:

kernel.Bind<IMyInterface1>.To<MyClass>(); 
kernel.Bind<IMyInterface2>.To<MyClass>(); 
kernel.Bind<IMyInterface3>.To<MyClass>(); 
kernel.Bind<IMyInterface4>.To<MyClass>(); 
+0

你想在这里解决什么问题? – Steven 2013-05-02 20:18:43

+0

我使用DI在本地调试中运行时使用内存中数据存储,然后在生产中使用EF连接到SQL数据库。我不希望我的EF上下文是单身人士,但每个请求内存存储是相当无用的:)我意识到我可以将.InSingletonScope()添加到第一个示例中的所有四行,但我只是想知道是否有东西清洁器。 – Kyle 2013-05-02 20:21:55

回答

2

所有.InXXXScope()方法归结为一个InScope(callback)方法。或者你可以做一个扩展方法,根据参数做一个或另一个。

Ninject.Extensions.Conventions在做类似这样的事情时很有用(并且它具有绑定多个接口和/或所有接口的例子)。

最重要的是 - 不要在测试中使用Ninject。我认为如果你需要像这样做大量的布线来实现像这样的重要开关,你就会错过抽象。或许AutoFixture或类似软件可以在您的环境中发挥作用?

+0

以前没有听说过AutoFixture,但我必须检查一下。谢谢! – Kyle 2013-05-03 12:50:34