質問

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

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top