4

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 を使用してまったく同じアプローチを試みましたが、期待どおりに動作します。

4

1 に答える 1

4

Ninject 2.0 にはこの機能がありますが、Ninject 1.x にはありません。2.0 はまだベータ版ですが、1.x は数か月以内にサポートが終了するため、ぜひご覧になることをお勧めします。

于 2009-04-05T18:20:35.810 に答える