Ninject,多个服务绑定

时间:2009-03-11 20:03:17

标签: c# inversion-of-control ninject

我正在使用Ninject加载几个模块。当两个模块尝试绑定一个接口的两个不同的实现时,ninject引发一个错误,即多个绑定a 服务是不允许的。

我正在使用的所有其他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尝试了完全相同的方法,它按预期工作。

1 个答案:

答案 0 :(得分:4)

Ninject 2.0具有此功能,但Ninject 1.x没有。虽然2.0仍然处于测试阶段,但我鼓励你去看看,因为1.x将会在几个月内结束。