【发布时间】:2010-03-18 13:44:31
【问题描述】:
我想根据传递的参数在 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 是解决我的问题的更好方法。详情见Contextual bindings with Ninject 2.0
问候
【问题讨论】:
标签: parameters ninject conditional-binding contextual-binding