我有以下代碼:Ninject - 重載WithConstructorArgument行爲怪異
namespace Test.Ninject.ConstructorArgumentBug
{
public class ClassA
{
private readonly IDependecy _dependecy;
public ClassA(IDependecy dependecy)
{
_dependecy = dependecy;
}
}
public interface IDependecy
{
}
public class ConcreteDependency : IDependecy
{
private readonly string _arg;
public ConcreteDependency(string arg)
{
_arg = arg;
}
}
public class Tests
{
[Test]
public void Test1()
{
var kernel = new StandardKernel();
kernel.Bind<IDependecy>()
.To<ConcreteDependency>()
.WhenInjectedInto<ClassA>()
.WithConstructorArgument(new ConstructorArgument("arg", "test"));
var classA = kernel.Get<ClassA>();
Assert.IsNotNull(classA);
}
[Test]
public void Test2()
{
var kernel = new StandardKernel();
kernel.Bind<IDependecy>()
.To<ConcreteDependency>()
.WhenInjectedInto<ClassA>()
.WithConstructorArgument("arg", "test");
var classA = kernel.Get<ClassA>();
Assert.IsNotNull(classA);
}
}
}
的測試1不起作用,但確實的Test2,我相信他們應該具有相同的行爲。它看起來像一個bug。出於某種原因,第一次測試無法解析的依賴性並出現以下錯誤:
Ninject.ActivationException : Error activating string No matching bindings are available, and the type is not self-bindable. Activation path: 3) Injection of dependency string into parameter arg of constructor of type ConcreteDependency 2) Injection of dependency IDependecy into parameter dependecy of constructor of type ClassA 1) Request for ClassA
我想,如果第一個測試失敗的第二個應該失敗了。難道我做錯了什麼?
謝謝!