Değer Türünü geçirme veya boş olmayan bir Referans Türü) yapar.
geçici çözüm Nesne için null adlı dökme şudur: -
var ninja = kernel.Get<Ninja>(new ConstructorArgument("weapon", (object)null));
Ninject 2 kaynak:
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));
}
}
Ders? En son kaynağı indirmemeli ve ona bakmamalısın. Harika yorumlar, güzel temiz kod tabanı. Bu ipucu/prodding için @Ian Davis'e tekrar teşekkürler! Benim biriminde kullanmak istiyorum
Ninject ile aşina değilim, ama konu IoC-container uygun bir kurucu bulmak için tip bilgileri kullanır ve boş değer tarafından bulamıyor olduğunu düşünüyorum. Dokümantasyonda veya kodunda cevap aramak daha iyi olur. Karşılık gelen Type nesnesinin örneğini kullandığım bir kitaplıkta null yerine geçirilmesi gerekir. Burada da benzer bir çözüm olabilir. – SergGr
Teşekkür ederim efendim :-) – stiank81