У вас есть несколько опций, как указано в 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
создать, основываясь на некоторых параметрах.