我正在使用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尝试了完全相同的方法,它按预期工作。
答案 0 :(得分:4)
Ninject 2.0具有此功能,但Ninject 1.x没有。虽然2.0仍然处于测试阶段,但我鼓励你去看看,因为1.x将会在几个月内结束。