2009-09-30 91 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>)的參數。

相關問題