Ninject, множественные сервисные привязки


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

Все другие фреймворки МОК, которые я использую (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, и он работает, как я и ожидал.

1 4

1 ответ:

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