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