У меня один интерфейс с двумя различными реализованными классами:
Bind<IRoundRobinMaker>().To<RoundRobinMaker>().Named("stdRoundRobin");
Bind<IRoundRobinMaker>().To<RoundRobinForcedCloseMaker>().Named("forcedClose");
Я создал фабрику для передачи некоторых параметров (только для RoundRobinForcedCloseMaker):
public interface IRoundRobinClosedForcedFactory
{
IRoundRobinMaker CreateFactory(int rrNumber, int qualifiedPlayers);
}
И установил его в Ninjectмодуль:
Bind<IRoundRobinClosedForcedFactory>().ToFactory();
Затем я ввел фабрику через WebApi в классе:
public class TournamentCloser
{
private readonly IRoundRobinClosedForcedFactory _factory;
public TournamentCloser(IRoundRobinClosedForcedFactory factory)
{
_factory = factory;
}
public void ForceClose(int id, int rrNumber, int qualifiedPlayers)
{
var fact = _factory.CreateFactory(rrNumber, qualifiedPlayers);
fact.CreateRoundRobin(tournament.players);
}
}
Я правильно получаю эту ошибку:
Error activating IRoundRobinMaker
More than one matching bindings are available.
Matching bindings:
1) binding from IRoundRobinMaker to RoundRobinMaker
2) binding from IRoundRobinMaker to RoundRobinForcedCloseMaker
Activation path:
1) Request for IRoundRobinMaker
Suggestions:
1) Ensure that you have defined a binding for IRoundRobinMaker only once
Как и гдесказать, что моя фабрика должна создать интерфейс IRoundRobinMaker, который будет внедрять класс RoundRobinForcedCloseMaker?