gpt4 book ai didi

.net - 为什么我不能用 Ninjects ConstructorArgument 注入(inject) null 值?

转载 作者:行者123 更新时间:2023-12-04 16:56:36 26 4
gpt4 key购买 nike

使用 Ninjects ConstructorArgument 时,您可以指定要注入(inject)特定参数的确切值。为什么这个值不能为空,或者我怎样才能让它工作?也许这不是您想做的事情,但我想在我的单元测试中使用它。示例:

public class Ninja
{
private readonly IWeapon _weapon;
public Ninja(IWeapon weapon)
{
_weapon = weapon;
}
}

public void SomeFunction()
{
var kernel = new StandardKernel();
var ninja = kernel.Get<Ninja>(new ConstructorArgument("weapon", null));
}

最佳答案

查看源代码(以及我通过复制获得的堆栈跟踪,您省略了:P)

这是因为它绑定(bind)到 ConstructorArgument 的不同重载。 ctor 比正常用法(即,您传递值类型或非空引用类型的地方)所做的。

解决方法是将 null 转换为 Object:-

var ninja = kernel.Get<Ninja>( new ConstructorArgument( "weapon", (object)null ) );

忍者 2 来源:
public class ConstructorArgument : Parameter
{
/// <summary>
/// Initializes a new instance of the <see cref="ConstructorArgument"/> class.
/// </summary>
/// <param name="name">The name of the argument to override.</param>
/// <param name="value">The value to inject into the property.</param>
public ConstructorArgument(string name, object value) : base(name, value, false) { }

/// <summary>
/// Initializes a new instance of the <see cref="ConstructorArgument"/> class.
/// </summary>
/// <param name="name">The name of the argument to override.</param>
/// <param name="valueCallback">The callback to invoke to get the value that should be injected.</param>
public ConstructorArgument(string name, Func<IContext, object> valueCallback) : base(name, valueCallback, false) { }
}

复制:
public class ReproAndResolution
{
public interface IWeapon
{
}

public class Ninja
{
private readonly IWeapon _weapon;
public Ninja( IWeapon weapon )
{
_weapon = weapon;
}
}

[Fact]
public void TestMethod()
{
var kernel = new StandardKernel();
var ninja = kernel.Get<Ninja>( new ConstructorArgument( "weapon", (object)null ) );
}
}

课?如果您不下载最新的源代码并查看它,您会发疯的。很棒的评论,干净的代码库。再次感谢@Ian Davis 的提示/刺激!

关于.net - 为什么我不能用 Ninjects ConstructorArgument 注入(inject) null 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com