我是使用 ninject 和 Dependency Injection 的新手,并且在使用它时遇到了问题。
我尝试在我的类库上使用 Ninject,并构建集成测试。现在,我在许多示例中看到,使用 ninject 只是指定了 DI 模块,如下所示:
Public Class DIModule : NinjectModule
public override void Load()
{
Bind<IUSAServices>().To<USAServices>();
}
然后在我的测试课上,我尝试调用我的依赖项是这样的:
[TestClass]
public class USAIntegrationTests
{
private readonly IUSAServices _usaService;
public USAIntegrationTests(IUSAServices usaServices)
{
_usaService = usaServices;
}
[TestMethod]
public void ValidateUserTests()
{
Assert.IsTrue(_usaService.ValidateUser("username1", "password1"));
}
}
并得到这个错误:
Unable to get default constructor for class USATests.IntegrationTests.USAIntegrationTests.
但是我阅读了文档并尝试这样:
[TestClass]
public class USAIntegrationTests
{
private readonly IUSAServices _usaService;
public USAIntegrationTests()
{
using (IKernel kernel = new StandardKernel(new DIModule()))
{
_usaService = kernel.Get<IUSAServices>();
}
}
[TestMethod]
public void ValidateUserTests()
{
Assert.IsTrue(_usaService.ValidateUser("mantab", "banget"));
}
}
测试工作正常。我的问题是,为什么我会收到这个错误?这是绕过它的某种方式吗?提前致谢。