Внедрение нескольких параметров конструктора одного типа с помощью Ninject 2.0

Я использую Ninject 2.0 для обработки DI в одном из моих приложений, и я обнаружил кое-что, что меня смущает. Если честно, отсутствие документации тоже не помогает.

Допустим, у меня есть конструктор с подписью -

ctor(IServiceFactory factory1, IServiceFactory factory2)
{
    this.factory1 = factory1;
    this.factory2 = factory2;
}

Хотя эти две службы реализуют один и тот же интерфейс, они представляют собой совершенно разные реализации и используются в разное время, поэтому я не хочу вводить IEnumerable .

Мой вопрос: когда я привязываю экземпляры, как мне сказать Ninject, что вводить для каждого?

Заранее спасибо.

Обновление

Ради тех, кто хочет увидеть код, в конечном итоге после прочтения ссылок Ремо ... Вот это вкратце. (Я никогда не думал, что в C # есть атрибуты параметров!)

//abstract factory
public interface IServiceFactory
{
    Service Create();
}

//concrete factories
public class Service1Factory : IServiceFactory
{
    public IService Create()
    {
        return new Service1();
    }
}

public class Service2Factory : IServiceFactory
{
    public IService Create()
    {
        return new Service2();
    }
}

//Binding Module (in composition root)
public class ServiceFactoryModule : NinjectModule
{
    public override void Load()
    {
        Bind<IServiceFactory>()
            .To<Service1Factory>()
            .Named("Service1");

        Bind<IServiceFactory>()
            .To<Service2Factory>()
            .Named("Service2");
    }
}

//consumer of bindings
public class Consumer(
    [Named("Service1")] service1Factory,
    [Named("Service2")] service2Factory)
{
}
11
задан Cornelius 30 July 2013 в 15:42
поделиться