Ninject - Создать фабрику с несколькими инжектами - PullRequest
0 голосов
/ 09 февраля 2019

У меня один интерфейс с двумя различными реализованными классами:

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?

...