En cuanto a la fuente (y el seguimiento de la pila llegué por reproing la que se omitiera: P)
Esto se debe a que es la unión a una sobrecarga diferente de la ctor ConstructorArgument
que el uso normal (es decir, donde' re pasando un tipo de valor o un tipo de referencia no nulo).
La solución consiste en emitir la hipótesis nula a Objeto: -
var ninja = kernel.Get<Ninja>(new ConstructorArgument("weapon", (object)null));
Ninject 2 Fuente:
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) { }
}
Repro:
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));
}
}
lección? Estaría loco no descargar la última fuente y mirarla. Grandes comentarios, buena base de código limpia. ¡Gracias de nuevo a @Ian Davis por ese consejo/consejo!
No estoy familiarizado con ninject, pero creo que el problema es que IoC-container utiliza información de tipo para encontrar un constructor adecuado y no puede encontrarlo por valor nulo. Será mejor que busque una respuesta en la documentación o en su código. En una biblioteca que utilicé se debe pasar la instancia del objeto Type correspondiente en lugar de null. Puede haber alguna solución similar aquí también. – SergGr
Gracias, señor :-) – stiank81