2009-09-30 63 views
3

使用ninject,我知道我可以绑定到特定的实现,使得whenver我做的:我可以使用ninject实时更改实现吗?

ISomeCache myCache = Ninject.Get<ISomeCache>(); 

它会载入我的具体实施,我结合ninject来。

说我存储哪个具体的实现我想在数据库(网络应用程序)中使用,当我在管理面板中更改它应该在飞行中使用我想要的类。

这可能吗?

回答

5

只要你可以确定你正在执行的上下文,是的,你可以做到这一点。

kernel.Bind<IMyService>().To<MyUserService>().When(request => GetSiteContext() == "user"); 

kernel.Bind<IMyService>().To<MyAdminService>().When(request => GetSiteContext() == "admin"); 

其中GetSiteContext是你会写,以确定你正在执行什么情况下的方法。.When(...)需要Func<IRequest,bool>为(等于Predicate<IRequest>)的参数。

相关问题