[英]Bind different implementations of same Interface using ninject
我使用ninject通過MVVM方法在WPF項目中注入依賴項。 我創建了UserControl
,它在Grid中顯示數據,並包含一個按鈕。 在按鈕上單擊時,Ninject注入的IChecker
實現會檢查Grid中的每個記錄。 問題是,我正在使用此UserControl
的兩個實例,並將兩個ViewModel
實例綁定到其DataContext
。 我想將IChecker
不同實現IChecker
給相同類型ViewModel
不同實例。 我如何用Ninject做到這一點?
如Ninject 上下文綁定文檔中所指定,您有多個選項
WhenXXX
一些可用的現成上下文綁定是:
Bind<IWarrior>().To<Ninja>();
Bind<IWarrior>().To<Samurai>().WhenClassHas<ClimberNeeded>();
Bind<IWarrior>().To<Samurai>().WhenTargetHas<ClimberNeeded>();
Bind<IWarrior>().To<SpecialNinja>().WhenMemberHas<SwimmerNeeded>();
Bind<IWarrior>().To<Samurai>().WhenInjectedInto(typeof(OnLandAttack));
Bind<IWarrior>().To<SpecialNinja>().WhenInjectedInto(typeof(AmphibiousAttack));
或者,您可以提供謂詞並在目標信息中使用自定義邏輯:
Bind<IWarrior>().To<Samurai>().When(request => request.Target.Member.Name.StartsWith("Climbing"));
Bind<IWarrior>().To<Samurai>().When(request => request.Target.Type.Namespace.StartsWith("Samurais.Climbing"));
如果您的邏輯決定要何時注入什么內容變得復雜,您可能想要實現某種ICheckerFactory
,它將基於某些參數知道要創建哪個IChecker
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.