渡されたパラメータに基づいて、ninjectで条件付きバインディングを使用したいと思います。私は以下のようなものを持っています:
public class Subject
{
}
public interface ITarget
{
}
public class Target1 : ITarget
{
}
public class Target2 : ITarget
{
}
そして今、私はITargetインターフェースをインスタンス化する必要があります:
public void MethodName(IKernel kernel)
{
ITarget target1 = kernel.Get<ITarget>(new Parameter("name", new Subject(), true)); // Should be instance of Target1
ITarget target2 = kernel.Get<ITarget>(); // Should be instance of Target2
}
適切なバインディングを定義するのに問題があります。私は次のことを試しました:
kernel.Bind<ITarget>().To<Target1>().When(Predicate);
kernel.Bind<ITarget>().To<Target2>();
private bool Predicate(IRequest request)
{
IParameter parameter = request.Parameters.Count == 0 ? null : request.Parameters[0];
if (parameter == null)
{
return false;
}
object parameterValue = parameter.GetValue( /*what to put here?*/);
return parameterValue != null && parameterValue.GetType().IsAssignableFrom(typeof(Subject));
}
しかし、渡されたパラメータの値を取得する方法がわかりません。IContextインスタンスをGetValueメソッドに渡す必要がありますが、IContextの有効なインスタンスを取得する方法がわかりません。それとも、私のタスクを達成するためのより良い方法がありますか?
編集:BindingMetadataは私の問題を解決するためのより良い方法です。詳細については、Ninject2.0を使用したコンテキストバインディングを参照してください。
よろしく