簡體   English   中英

使用ninject綁定同一接口的不同實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM