2011-12-02 5 views
1

私はIListenerという名前のインタフェースを持っています。今は、そのインタフェースのインスタンスを受け取るクラスを作成したいと思います。注入するオブジェクトのパラメータ名を取得

public Controller(IListener listener1, IListener listener2) 
{ ... } 

IListenerの実装にはポートが必要です。 IListenerのバインディングでパラメータ名を確認するにはどうしたらいいですか?コールバックは次のようになります:

public Kernel() 
    { 
     Bind<IListener>() 
      .To<SyncUdpListener>() 
      .WithConstructorArgument("port", GetListenerPort); 
    } 

    private object GetListenerPort(IContext context, ITarget target) 
    { 
     var command = this.Get<Command>(); 

     switch (...) 
     { 
      case "videoListener": 
       return command.VideoPort; 
      case "audioListener": 
       return command.AudioPort; 
     } 

     throw new Exception(); 
    } 

ここでは、switch文でパラメータ名を入力する必要があります。

ありがとうございます!

答えて

2

私は100%あなたがここで達成したいと思っています。

public Controller(IListener videoListener, IListener audioListener) 
{ ... } 

そして、次のコードで:あなたのコントローラがどのように見える場合でも、

private object GetListenerPort(IContext context, ITarget target) 
{ 
    var command = this.Get<Command>(); 

    switch (context.Request.Target.Name) 
    { 
     case "videoListener": 
      return command.VideoPort; 
     case "audioListener": 
      return command.AudioPort; 
    } 

    throw new Exception(); 
} 

次の2つのIListener VideoPortとインスタンス、およびAUDIOPORTのパラメータを持つコントローラを取得します。そして、おそらくRequest.Target.Typeが正しいコントローラータイプであることを確認する必要があります。

+0

はい!ありがとうございました ;) – Matthias

関連する問題