mrb*_*lah 3 c# asp.net ninject
使用ninject,我知道我可以绑定到某个实现,这样当我这样做时:
ISomeCache myCache = Ninject.Get<ISomeCache>();
Run Code Online (Sandbox Code Playgroud)
它将加载我绑定ninject的具体实现.
假设我在数据库(Web应用程序)中存储了我想要使用的具体实现,当我在管理面板中更改它时,它应该使用我想要的类.
这可能吗?
只要您可以确定执行的上下文,是的,您可以这样做.
kernel.Bind<IMyService>().To<MyUserService>().When(request => GetSiteContext() == "user");
kernel.Bind<IMyService>().To<MyAdminService>().When(request => GetSiteContext() == "admin");
Run Code Online (Sandbox Code Playgroud)
其中GetSiteContext是您要编写的方法,用于确定您正在执行的上下文..When(...)
将a Func<IRequest,bool>
作为参数(等于Predicate<IRequest>
).