我希望在自己的类中使用来自appsettings.json的设置。
我在控制器和剃须刀中都能正常工作。我试图在自己的类中使用与控制器中相同的代码:
public class Email
{
private readonly IConfiguration _config;
public Email(IConfiguration config)
{
_config = config;
}
但是当我尝试称呼它
Email sendEmail = new Email();
它要求我提供config作为参数。 DI系统不应该提供(注入)吗?在ConfigureServices中,我有以下内容:
services.AddSingleton(Configuration);
我也需要在某个地方注册电子邮件课程吗?我需要用不同的方式称呼它吗?
答案 0 :(得分:0)
使用以下代码时:
Email sendEmail = new Email();
根本不涉及DI系统-您已经掌握了一切。相反,您应该将Email
添加到DI系统,然后注入 it 。例如:
services.AddSingleton<Email>(); // You might prefer AddScoped, here, for example.
然后,例如,如果您正在控制器中访问Email
,则也可以注入它:
public class SomeController : Controller
{
private readonly Email _email;
public SomeController(Email email)
{
_email = email;
}
public IActionResult SomeAction()
{
// Use _email here.
...
}
}
从本质上讲,这仅意味着您需要完全使用DI。如果您想提供有关 where 的更多详细信息,而您当前正在创建Email
类,那么我可以为这些示例进一步定制。
这有点麻烦,但是您也可以使用动作内部的[FromServices]
属性来注入依赖项。使用此方法意味着您可以跳过构造函数和私有字段方法。例如:
public class SomeController : Controller
{
public IActionResult SomeAction([FromServices] Email email)
{
// Use email here.
...
}
}
答案 1 :(得分:0)