2009-03-11 7 views
4

Ninjectを使用して複数のモジュールをロードしています。 2つのモジュールがインタフェース用の2つの異なる実装をバインドしようとすると、nickjectは サービスに対する複数のバインディングが許可されていないというエラーを発生させます。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

Ninject 2.0にはこの機能がありますが、Ninject 1.xではこの機能はありません。 2.0はまだベータ版ですが、1.xは2〜3ヶ月で終了する予定ですので、ぜひご覧ください。

+1

レスポンスありがとうございました。私はすぐにNinject 2.0をチェックアウトします。ちなみに素晴らしい仕事、私はあなたの忍者のスキルに感心しています。 –

関連する問題