【发布时间】:2016-11-16 04:41:57
【问题描述】:
我有一个简单的类,如下所示:
public class TestClass1
{
private string testString = "Should be set by DI";
public TestClass1(string testString)
{
this.testString = testString;
}
public string GetData()
{
return testString + DateTime.Now;
}
}
我想在一个简单的 ASP.NET 核心 Web 应用程序中使用内置 DI 注入它,但在初始化依赖注入时设置了“testString”参数。
我尝试在startup.cs 中设置以下内容,但在运行时失败,因为 TestClass1 没有无参数构造函数:
services.AddScoped(provider => new TestClass1("Success!"));
【问题讨论】:
-
你的问题没有意义;您发布的代码可以正常工作。您可能在问题中遗漏了一些重要信息,但我无法确定您遗漏了什么。请发布您获得的异常详细信息(异常类型、消息、堆栈跟踪和内部异常详细信息)。
-
你真的在注入这个类,你是否尝试像
new TestClass()那样用“new”来初始化它? DI 不是这样工作的 -
你能发布你的 ConfigureServices 方法吗?
-
@Tseng:当然,有时你需要直接注册一个类型的实例。所以这是一个常见的场景。正如 Steven 已经写的那样,它应该像这样工作。
-
@JuergenGutsch:不,你在获取实例时不要使用
new关键字。你总是通过构造函数注入它。 DI 不是某种编译器魔法,它只是带有一些反射或 ExpressionTrees 的普通 CLR/OOP。我怀疑他在他的代码中使用了new TestClass()(注意 new 关键字并且没有参数)。这不是 DI 的工作方式。而是通过public MyService(TestClass injectedTestCass)之类的构造函数传递它
标签: c# dependency-injection asp.net-core .net-core