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