Ninject, привязки нескольких сервисов

Я использую Ninject для загрузки нескольких модулей. Когда два модуля пытаются связать две разные реализации интерфейса, ninject выдает ошибку, запрещающую множественное связывание для службы.

Все остальные IoC-фреймворки, которые я использую (Unity, Windsor, Spring.net и т. Д.), Имеют возможность «регистрировать» несколько реализаций интерфейса.

Приведу пример из реальной жизни:

public class HealtMonitorEmailAlertServiceModule : StandardModule
{
    public override void Load()
    {
        this.Bind<IAlertService>().To<EmailAlertService>();
    }
}

public class HealtMonitorSmsAlertServiceModule : StandardModule
{
    public override void Load()
    {
        this.Bind<IAlertService>().To<SmsAlertService>();
    }
}

public class Program
{
    static void Main()
    {
        var emailService = new HealtMonitorEmailAlertServiceModule();
        var smsService = new HealtMonitorSmsAlertServiceModule();

        IKernel kernel = new StandardKernel(emailService, smsService);  
        kernel.Get<IAlertService>()
    }
}

Вышеупомянутое генерирует исключение, я бы ожидал, что он разрешит тип, зарегистрированный в последнем модуле для загрузки в ядро. Я пробовал точно такой же подход с использованием Autofac, и он работает так, как я ожидал.


person Rohan West    schedule 11.03.2009    source источник


Ответы (1)


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

person Nate Kohari    schedule 05.04.2009
comment
Спасибо за ответ, Нейт, я скоро проверю Ninject 2.0. Кстати, отличная работа, я впечатлен твоими навыками ниндзя. - person Rohan West; 06.04.2009