我可以使用ninject来动态更改实现吗?

时间:2009-09-30 13:17:41

标签: c# asp.net ninject

使用ninject,我知道我可以绑定到某个实现,这样当我这样做时:

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

它将加载我绑定ninject的具体实现。

假设我在数据库(Web应用程序)中存储了我想要使用的具体实现,当我在管理面板中更改它时,应该使用我想要的类。

这可能吗?

1 个答案:

答案 0 :(得分: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>)。