स्रोत (और स्टैक ट्रेस मैं reproing से मिला जो आप छोड़े गए: पी) को देखते हुए
इसका कारण यह है कि यह (यानी, जहां 'सामान्य उपयोग से ConstructorArgument
ctor का एक अलग अधिभार के लिए बाध्य कर रहा है एक मूल्य प्रकार या एक गैर-शून्य संदर्भ प्रकार गुजर रहा है) करता है।
वैकल्पिक हल अशक्त कास्ट करने के लिए वस्तु के लिए है: -
var ninja = kernel.Get<Ninja>(new ConstructorArgument("weapon", (object)null));
Ninject 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));
}
}
सबक? आप पागल हो जाएंगे कि नवीनतम स्रोत डाउनलोड न करें और इसे देखें। महान टिप्पणियां, अच्छी साफ कोडबेस। उस टिप/प्रोडिंग के लिए @ इयान डेविस को फिर से धन्यवाद!
स्रोत
2010-04-19 12:59:16
मैं निंजा से परिचित नहीं हूं, लेकिन मुझे लगता है कि मुद्दा यह है कि आईओसी-कंटेनर एक उपयुक्त कन्स्ट्रक्टर खोजने के लिए प्रकार की जानकारी का उपयोग करता है और इसे शून्य मान से नहीं मिल सकता है। आप दस्तावेज़ में या उसके कोड में उत्तर खोजना बेहतर होगा। एक लाइब्रेरी में जिसे मैंने इसी प्रकार के ऑब्जेक्ट का उदाहरण इस्तेमाल किया है, उसे शून्य के बजाय पास किया जाना है। यहां कुछ समान समाधान भी हो सकते हैं। – SergGr
धन्यवाद सर :-) – stiank81