Skip to content

Commit c007f65

Browse files
committed
Atualiza injeção de dependência e estrutura de classes
As alterações incluem a atualização da classe `AWSDispatcher` para usar `IOptions<AWSSettings>`, melhorando a injeção de dependência. A classe `AWSSettings` foi reestruturada para incluir uma constante `SectionName`. A função `AddMailerWithAws` em `ConfigureServices.cs` foi modificada para integrar as novas opções. O projeto `Codout.Mailer.AWS` teve sua versão atualizada para `5.0.5` e novas referências de pacotes foram adicionadas. A classe `SendGridDispatcher` também foi atualizada para usar `IOptions<SendGridSettings>`, e a estrutura de `SendGridSettings` foi alterada para incluir uma constante `SectionName`. O arquivo `MailerOptions.cs` recebeu novas propriedades e melhorias na validação. A nova classe `MailerServiceBase` foi introduzida para centralizar a lógica de envio de emails, promovendo a reutilização de código. Várias outras alterações foram feitas em arquivos de configuração e serviços para garantir a funcionalidade das novas classes e métodos.
1 parent 613facb commit c007f65

13 files changed

Lines changed: 107 additions & 216 deletions

File tree

Codout.Mailer.AWS/AWSDispatcher.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,19 @@
77
using Amazon.Runtime;
88
using Amazon.SimpleEmailV2;
99
using Amazon.SimpleEmailV2.Model;
10+
using Codout.Mailer.AWS.Configuration;
1011
using Codout.Mailer.Interfaces;
1112
using Codout.Mailer.Models;
13+
using Microsoft.Extensions.Options;
1214
using MimeKit;
1315
using ContentType = MimeKit.ContentType;
1416

1517
namespace Codout.Mailer.AWS;
1618

17-
public class AWSDispatcher(AWSSettings settings) : IMailerDispatcher
19+
public class AWSDispatcher(IOptions<AWSSettings> settings) : IMailerDispatcher
1820
{
21+
private readonly AWSSettings _settings = settings.Value;
22+
1923
public async Task<MailerResponse> Send(MailAddress from,
2024
MailAddress to,
2125
string subject,
@@ -26,8 +30,8 @@ public async Task<MailerResponse> Send(MailAddress from,
2630
try
2731
{
2832
var client = new AmazonSimpleEmailServiceV2Client(
29-
new BasicAWSCredentials(settings.AccessKey, settings.SecretKey),
30-
RegionEndpoint.GetBySystemName(settings.RegionEndpoint));
33+
new BasicAWSCredentials(_settings.AccessKey, _settings.SecretKey),
34+
RegionEndpoint.GetBySystemName(_settings.RegionEndpoint));
3135

3236
// Montar e-mail usando MimeKit (recomendado)
3337
var message = new MimeMessage();

Codout.Mailer.AWS/Codout.Mailer.AWS.csproj

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<TargetFramework>net9.0</TargetFramework>
55
<Authors>Clovis Coli Jr</Authors>
6-
<Version>5.0.0</Version>
6+
<Version>5.0.5</Version>
77
<Company>Codout</Company>
88
<Description>Sender da Amazon Simple Email Service para envio de E-mails utilizando a biblioteca Codout.Mailer</Description>
99
<Copyright>Codout</Copyright>
@@ -18,18 +18,19 @@
1818

1919
<ItemGroup>
2020
<PackageReference Include="AWSSDK.SimpleEmailV2" Version="4.0.1.1" />
21+
<PackageReference Include="Microsoft.Extensions.Options" Version="9.0.6" />
2122
<PackageReference Include="MimeKit" Version="4.13.0" />
2223
</ItemGroup>
2324

24-
<ItemGroup>
25-
<ProjectReference Include="..\Codout.Mailer\Codout.Mailer.csproj" />
26-
</ItemGroup>
27-
2825
<ItemGroup>
2926
<None Include="..\logo-nuget.png">
3027
<Pack>True</Pack>
3128
<PackagePath></PackagePath>
3229
</None>
3330
</ItemGroup>
3431

32+
<ItemGroup>
33+
<ProjectReference Include="..\Codout.Mailer\Codout.Mailer.csproj" />
34+
</ItemGroup>
35+
3536
</Project>

Codout.Mailer.AWS/AWSSettings.cs renamed to Codout.Mailer.AWS/Configuration/AWSSettings.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
namespace Codout.Mailer.AWS;
1+
namespace Codout.Mailer.AWS.Configuration;
22

33
public class AWSSettings
44
{
5+
public const string SectionName = "AWSSettings";
6+
57
public string RegionEndpoint { get; set; }
68

79
public string AccessKey { get; set; }

Codout.Mailer.AWS/Configuration/ConfigureServices.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ public static class ConfigureServices
1313
/// </summary>
1414
public static IServiceCollection AddMailerWithAws(this IServiceCollection services,
1515
IConfiguration configuration,
16-
Action<MailerOptions>? configureOptions = null)
16+
Action<MailerOptions>? options = null)
1717
{
18-
return services
19-
.AddMailer(configuration, configureOptions)
18+
services.AddOptions<AWSSettings>().Bind(configuration.GetSection(AWSSettings.SectionName));
19+
20+
return services
21+
.AddMailer(configuration, options)
2022
.AddScoped<IMailerDispatcher, AWSDispatcher>();
2123
}
2224
}

Codout.Mailer.SendGrid/Codout.Mailer.SendGrid.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<TargetFramework>net9.0</TargetFramework>
55
<Authors>Clovis Coli Jr</Authors>
6-
<Version>5.0.0</Version>
6+
<Version>5.0.5</Version>
77
<Company>Codout</Company>
88
<Description>Sender da SendGrid para envio de E-mails utilizando a biblioteca Codout.Mailer</Description>
99
<Copyright>Codout</Copyright>

Codout.Mailer.SendGrid/Configuration/ConfigureServices.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public static IServiceCollection AddMailerWithSendGrid(this IServiceCollection s
1515
IConfiguration configuration,
1616
Action<MailerOptions>? configureOptions = null)
1717
{
18+
services.AddOptions<SendGridSettings>().Bind(configuration.GetSection(SendGridSettings.SectionName));
19+
1820
return services
1921
.AddMailer(configuration, configureOptions)
2022
.AddScoped<IMailerDispatcher, SendGridDispatcher>();

Codout.Mailer.SendGrid/SendGridSettings.cs renamed to Codout.Mailer.SendGrid/Configuration/SendGridSettings.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
namespace Codout.Mailer.SendGrid;
1+
namespace Codout.Mailer.SendGrid.Configuration;
22

33
public class SendGridSettings
44
{
5+
public const string SectionName = "SendGridSettings";
6+
57
public string ApiKey { get; set; }
68

79
public bool StandBox { get; set; }

Codout.Mailer.SendGrid/SendGridDispatcher.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,17 @@
66
using Codout.Mailer.Helpers;
77
using Codout.Mailer.Interfaces;
88
using Codout.Mailer.Models;
9+
using Codout.Mailer.SendGrid.Configuration;
10+
using Microsoft.Extensions.Options;
911
using SendGrid;
1012
using SendGrid.Helpers.Mail;
1113
using Attachment = System.Net.Mail.Attachment;
1214

1315
namespace Codout.Mailer.SendGrid;
1416

15-
public class SendGridDispatcher : IMailerDispatcher
17+
public class SendGridDispatcher(IOptions<SendGridSettings> sendGridSettings) : IMailerDispatcher
1618
{
17-
private readonly SendGridSettings _sendGridSettings;
18-
19-
public SendGridDispatcher(SendGridSettings sendGridSettings)
20-
{
21-
_sendGridSettings = sendGridSettings;
22-
}
19+
private readonly SendGridSettings _sendGridSettings = sendGridSettings.Value;
2320

2421
public async Task<MailerResponse> Send(MailAddress from, MailAddress to, string subject, string htmlContent,
2522
string plainTextContent = null, Attachment[] attachments = null)
@@ -33,7 +30,7 @@ public async Task<MailerResponse> Send(MailAddress from, MailAddress to, string
3330
plainTextContent,
3431
htmlContent);
3532

36-
if (attachments != null && attachments.Length > 0)
33+
if (attachments is { Length: > 0 })
3734
foreach (var attachment in attachments)
3835
{
3936
var bytes = attachment.ContentStream.ReadFully();
@@ -55,7 +52,7 @@ public async Task<MailerResponse> Send(MailAddress from, MailAddress to, string
5552
return new MailerResponse
5653
{
5754
Sent = false,
58-
ErrorMessages = new List<string>(new[] { e.Message })
55+
ErrorMessages = new List<string>([e.Message])
5956
};
6057
}
6158
}

Codout.Mailer/Codout.Mailer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<TargetFramework>net9.0</TargetFramework>
55
<Authors>Clovis Coli Jr</Authors>
6-
<Version>5.0.0</Version>
6+
<Version>5.0.5</Version>
77
<Company>Codout</Company>
88
<Description>Biblioteca para envio de e-mails</Description>
99
<Copyright>Codout</Copyright>

Codout.Mailer/Configuration/ConfigureServices.cs

Lines changed: 19 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,56 +10,43 @@ namespace Codout.Mailer.Configuration;
1010

1111
public static class ConfigureServices
1212
{
13-
public static IServiceCollection AddMailer(this IServiceCollection services,
14-
IConfiguration configuration,
15-
Action<MailerOptions>? configureOptions = null)
13+
public static IServiceCollection AddMailer(this IServiceCollection services,
14+
IConfiguration configuration,
15+
Action<MailerOptions>? options = null)
1616
{
1717
// Configuração das settings principais
1818
services.Configure<MailerSettings>(configuration.GetSection(MailerSettings.SectionName));
19-
19+
2020
// Configuração das opções do mailer
21-
services.Configure<MailerOptions>(options =>
21+
services.Configure<MailerOptions>(mailerOptions =>
2222
{
23-
configuration.GetSection("MailerOptions").Bind(options);
24-
configureOptions?.Invoke(options);
25-
options.Validate(); // Valida as configurações
23+
configuration.GetSection("MailerOptions").Bind(mailerOptions);
24+
options?.Invoke(mailerOptions);
25+
mailerOptions.Validate();
2626
});
27-
27+
2828
// Registro do RazorLightEngine como singleton
2929
services.AddSingleton(provider =>
3030
{
31-
var options = provider.GetRequiredService<IOptions<MailerOptions>>().Value;
32-
31+
var mailerOptions = provider.GetRequiredService<IOptions<MailerOptions>>().Value;
32+
3333
var builder = new RazorLightEngineBuilder();
34-
35-
// Configuração baseada nas opções
36-
if (options.TemplateRootType != null)
37-
{
38-
builder.UseEmbeddedResourcesProject(options.TemplateRootType);
39-
}
40-
41-
if (options.EnableTemplateCache)
42-
{
34+
35+
builder.UseEmbeddedResourcesProject(mailerOptions.TemplateRootType.Assembly, mailerOptions.RazorLight.DefaultNamespace);
36+
37+
if (mailerOptions.RazorLight.EnableTemplateCache)
4338
builder.UseMemoryCachingProvider();
44-
}
45-
46-
// Configurações específicas do RazorLight
47-
if (!string.IsNullOrEmpty(options.RazorLight.DefaultNamespace))
48-
{
49-
builder.SetOperatingAssembly(options.TemplateRootType?.Assembly ?? typeof(MailerOptions).Assembly);
50-
}
51-
39+
5240
return builder.Build();
5341
});
54-
42+
5543
// Registro dos serviços principais
5644
services.AddScoped<ITemplateEngine, RazorTemplateEngine>();
57-
services.AddScoped<IMailerService, MailerService>();
58-
45+
5946
// Health checks
6047
services.AddHealthChecks()
6148
.AddCheck<MailerHealthCheck>("mailer");
62-
49+
6350
return services;
6451
}
6552
}

0 commit comments

Comments
 (0)