我有一个构造函数,例如:
public AnalyticsController(ClassA classA, ClassB classB, bool isLiveEnvironment)
{
...
}
isLiveEnvironment
是使用对现有静态类的调用来确定的,例如:
MultiTenancyDetection.GetInstance().IsLive();
我希望能够在控制器之外进行此调用,并将结果注入isLiveEnvironment。这可能吗?我看不出这是怎么做的。
答案 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>();