【发布时间】:2019-03-01 17:31:11
【问题描述】:
我已将依赖注入添加到项目中。但是当我使用 new 关键字创建实例时,依赖注入不起作用。
public class MyClass
{
ILoginTokenKeyApi _loginTokenKeyApi;
public MyClass(ILoginTokenKeyApi loginTokenKeyApi)
{
_loginTokenKeyApi = loginTokenKeyApi;
}
...
}
当我尝试创建 MyClass 的实例时,它希望自然地构造一个参数。
就像这样:
MyClass mc = new MyClass(); // ERROR, it wants a parameter (but it is what i want)
我必须这样做:
MyClass mc = new MyClass(new LoginTokenKeyClass()); // this is not a good code for me
我如何创建一个不带参数的 MyClass 实例,因为它注入了依赖项。
【问题讨论】:
-
您是否尝试使用依赖注入注册 ILoginTokenKeyApi?它通常应该能够自动将参数插入到构造函数中。否则,如果您真的想创建一个没有 ILoginTokenKeyApi 对象的实例,请参阅关于属性注入的答案。如果您在单元测试的上下文中需要这个,您可能应该研究像 moq 这样的模拟框架。
-
@vasily.sib // 我已经对这篇文章进行了一些编辑,请再次检查。
-
你使用的是什么 IoC 容器?
-
好吧,当您使用依赖注入时,通常您不会自己创建实例。这是DI容器的责任。举个例子,你可以使用 Ninject 创建一个这样的实例:
var instance = _kernel.Get<MyClass>();. -
请帮助我们为您提供帮助。您的问题非常不清楚,可能是因为您误解了依赖注入。为了帮助我们,请您阅读关于依赖注入的免费introductory chapter 或this book。读完那章后,你能重新提出你的问题吗?
标签: c# asp.net asp.net-core dependency-injection parameter-passing