4

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

4

1 回答 1

4

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

于 2009-04-05T18:20:35.810 回答