我可以使用Ninject将布尔值绑定到命名的构造函数值

时间:2014-03-19 16:33:35

标签: ninject

我有一个构造函数,例如:

public AnalyticsController(ClassA classA, ClassB classB, bool isLiveEnvironment)
{
   ...
}

isLiveEnvironment是使用对现有静态类的调用来确定的,例如:

MultiTenancyDetection.GetInstance().IsLive();

我希望能够在控制器之外进行此调用,并将结果注入isLiveEnvironment。这可能吗?我看不出这是怎么做的。

2 个答案:

答案 0 :(得分:4)

您可以使用WithConstructorArgument并使用回调来完成此操作:

kernel.Bind<AnalyticsController>()
      .ToSelf()
      .WithConstructorArgument("isLiveEnvironment", ctx => MultiTenancyDetection.GetInstance().IsLive() );

答案 1 :(得分:1)

你甚至可以更普遍地实现这一目标(但我不建议在这种特定用例中绑定这种通用类型):

IBindingRoot.Bind<bool>().ToMethod(x => MultiTenancyDetection.GetInstance().IsLive())
    .When(x => x.Target.Name == "isLiveEnvironment");

或者,如果您需要在多个/多个类中使用相同的配置值,请为其创建一个接口:

public interface IEnvironment
{
    bool IsLive { get; }
}

internal class Environment : IEnvironment
{
    public bool IsLive
    {
        get
        {
            return MultiTenancyDetection.GetInstance().IsLive();
        }
    }
}

IBindingRoot.Bind<IEnvironment>().To<Environment>();