使用ninject,我知道我可以绑定到某个实现,这样当我这样做时:
ISomeCache myCache = Ninject.Get<ISomeCache>();
它将加载我绑定ninject的具体实现。
假设我在数据库(Web应用程序)中存储了我想要使用的具体实现,当我在管理面板中更改它时,应该使用我想要的类。
这可能吗?
答案 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>
)。