Ninject を使用して複数のモジュールをロードしています。2 つのモジュールがインターフェイスの 2 つの異なる実装をバインドしようとすると、サービスの複数のバインドが許可されていないというエラーが 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 を使用してまったく同じアプローチを試みましたが、期待どおりに動作します。