Blazor 中的 SendGrid 电子邮件服务 - 依赖注入或静态方法

2023-12-23

我正在 Blazor 应用程序 (.NET 5) 中设置 SendGrid 电子邮件发送器。

根据 SendGrid 文档和示例,他们正在编写一个签名为的方法static async Task然后他们await来自他们的 API 的响应。他们的示例代码立即运行Main()并且不显示任何方法调用。

使用它作为静态方法是否违反了我应该如何使用依赖注入?我是否应该将此 EmailSender 类注册为具有依赖注入的服务,然后将其注入到需要发送电子邮件的组件中?

SendGrid 示例中的代码:

private static void Main()
{
    Execute().Wait();
}

static async Task Execute()
{
    //Boilerplate code setting up email from/to/apiKey etc removed
    var response = await client.SendEmailAsync(msg);
}

通过此设置,我可以将 Execute() 方法公开,然后直接将其作为静态方法调用。

制作如下内容是否更合适:

public class EmailService
{
    public async Task SendEmail(string to, string subject, string message)
    {
        //Boilerplate code setting up email from/to/apiKey etc removed
        var response = await client.SendEmailAsync(msg);
    }
}

然后我可以通过 DI 注入并使用该服务,例如:

@inject EmailService emailService

@code {
    //Calling line below in the appropriate spot
    await emailService.SendEmail(to, subject, message);
}

.NET Core 中的通用实现:

启动.cs

using SendGrid.Extensions.DependencyInjection; // nuget package: https://www.nuget.org/packages/SendGrid.Extensions.DependencyInjection

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // sendgrid
        services.AddSendGrid(options =>
        {
            options.ApiKey = Environment.GetEnvironmentVariable("SENDGRID_API_KEY");
        });
    }
}

电子邮件控制器.cs

using SendGrid; // nuget package

public class EmailController : ControllerBase
{
    private ISendGridClient _sendGridClient;
    
    public EmailController(ISendGridClient sendGridClient)
    {
        _sendGridClient = sendGridClient;
    }
    
    public IActionResult SendEmail(Email email)
    {
        var emailManager = new EmailManager(_sendGridClient);
        return emailManager.SendEmail(email);
    }
}

电子邮件管理器.cs

using SendGrid;

public class EmailManager
{
    private ISendGridClient _sendGridClient;
    
    public EmailManager(ISendGridClient sendGridClient)
    {
        _sendGridClient = sendGridClient;
    }
    
    public bool SendEmail(Email email)
    {
        ...
        var response = await _sendGridClient.SendEmailAsync(msg);
        ...
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Blazor 中的 SendGrid 电子邮件服务 - 依赖注入或静态方法 的相关文章

  • WinForms:如何确定窗口是否不再活动(没有子窗口具有焦点)?

    我的应用程序使用多个窗口 我想隐藏一个特定窗口 以防应用程序失去焦点 当活动窗口不是应用程序窗口时 source https stackoverflow com questions 466354 how can i tell if a wi
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • Linq to SQL,基于 If/Else 具有不同返回类型的存储过程

    我有一个现有的存储过程 我现在尝试使用 LINQ to SQL 调用它 这是存储过程 ALTER procedure dbo sp SELECT Security ALL UID Varchar 15 as DECLARE A ID int
  • Analytics.js 的 SegmentIO 开源版本设置问题

    我正在从 SegmentIO 切换到他们的开源版本 我用过这个博客文章 http pivotallabs com how to use analytics js to fix your analytics code and achieve
  • Lightsail 中没有 Amazon Linux 2?

    尝试在 AWS Lightsail 上创建新实例时 只有适用于 AWS Linux 2018 03 0 的选项 而没有适用于 AWS Linux 2 的选项 鉴于 AWS Linux 将于 2020 年 12 月终止支持 我有点担心在 Li
  • 在 Docker 中运行 Jenkins - 立即退出

    我正在尝试使用 docker 运行 Jenkins 服务器 我已经构建了图像 并尝试使用以下命令运行它 docker run p 8080 8080 62a4e44bf4bf 62a4e44bf4bf 是 docker 镜像 ID 每当我运
  • SQL Server Reporting Services url 参数不起作用

    我无法正确地将参数传递到 SQL Server 报告服务器 显示报表页面 但报表查看器 Web 部件的参数提示仍然为空 并且没有运行任何内容 以下网址将我带到正确的报告页面 我可以在其中手动选择参数 然后单击 查看报告 按钮并获取报告 ht
  • localStorage 的设置值有副作用吗?

    我正在开发一个必须保存的 React Redux 应用程序certain值从商店到localStorage 我有一些实用功能 可以安全地将值存储到localStorage 我有一个动作 thunk 和减速器 const wallet sta
  • Express.js 项目中在哪里进行验证 – 数据库层验证(re. Mongoose)?

    我正在 Express js 中编写一个带有表单的应用程序 首先 我在路由 或控制器 如果您愿意的话 中进行所有验证 app post register function req res next Generic validation re
  • Cordova / Phonegap 所有外部 Ajax 请求返回 404

    我确实有一个 Cordova 3 3 应用程序 但昨天我将 cordova 和所有应用程序插件更新为 apache cordova v5 0 自从我这样做以来 我放置了一个闪屏插件并毫无问题地构建了我的应用程序 但是当我尝试测试时 我看到所
  • HTML5 Canvas 绘制像素的颜色与提供的颜色不同

    设置某种颜色后fillStyle画布并绘制一个矩形fillRect 矩形的颜色有时与提供的颜色略有不同 getImageData返回不同的值 通常其中一个值小 1 似乎只有在使用时才会发生rgba颜色 而不是与rgb 但我实际上确实需要使用
  • JBoss 5 上的 RESTEasy - 需要 jar

    我们正在运行 JBoss 5 1 0 我正在尝试使用 RESTEasy 启动并运行一个简单的测试应用程序 但是 我无法弄清楚我需要什么才能做到这一点 显然新版本的 JBoss 已经包含了所有内容 但这对我没有帮助 据我了解 我需要修改应用程
  • 如何使用宏将字符串转换为变量名?

    define TRACE arg1 char arg1 int main void int a 4 TRACE Hello a convert Hello to a valid char variable name return 0 我在转
  • BeautifulSoup:获取特定表的内容

    我当地的机场 http www iaa gov il Rashat he IL Airports BenGurion informationForTravelers OnlineFlights aspx flightsType arr可耻地
  • 重新编译 Heroku slug,无需推送或更改配置

    我想知道是否有一种方法可以强制 Heroku 重新编译 slug 而不需要推送新的提交和 或更新配置变量 我为什么要这样做 我在 Heroku 上使用 Cedar 堆栈作为 Rails 3 2 应用程序 但在使用时遇到问题rake asse
  • 加载 Keras 模型时未知的初始化程序:GlorotUniform

    我通过 google colab 训练了我的 CNN VGG 并生成了 h5 文件 现在的问题是 我可以通过 google colab 成功预测我的输出 但是当我下载 h5 训练模型文件并尝试在我的笔记本电脑上预测输出时 我在加载模型时遇到
  • 尽管安装成功但无法识别节点

    我试着跑nodejs在全新安装的Windows 7的 这就是我所做的 使用 Windows 安装程序安装节点 确保文件被提取到C Program Files x86 nodejs 确保我的 Path 环境变量包含C Program File
  • Apache C++ 模块持久全局对象

    我希望在 Apache C 模块中保持一些全局对象在 Apache 子进程调用中保持不变 我该怎么做呢 您必须使用 Apache 进程外部的某种形式的存储 基本选择 一个数据库 共享内存 取决于操作系统 另一个进程并使用IPC机制 例如套接
  • Google Calendar API - 只能更新事件一次

    我遇到了与这篇文章中描述的相同的问题 Google Calendar api v3 重新更新问题 https stackoverflow com questions 8574088 google calendar api v3 re upd
  • 将私有方法公开以对其进行单元测试...好主意吗?

    Moderator Note There are already 39 answers posted here some have been deleted Before you post your answer consider whet
  • Rstudio 的“在文件中查找”有 R 版本吗?

    我喜欢 Rstudio 的 在文件中查找 功能 您可以在指定目录中的所有文件中搜索文本 但我讨厌指定要搜索的目录和文件类型的方式 您必须单击并指向 呃 有谁知道在 R 控制台中执行此操作的简单方法 fif lt function what
  • Blazor 中的 SendGrid 电子邮件服务 - 依赖注入或静态方法

    我正在 Blazor 应用程序 NET 5 中设置 SendGrid 电子邮件发送器 根据 SendGrid 文档和示例 他们正在编写一个签名为的方法static async Task然后他们await来自他们的 API 的响应 他们的示例