144 messaggi dal 26 febbraio 2007
Ciao,

Nella mail applicazione ho un controller che deve inviare una mail. E' l'unico caso in cui uso la mail (quindi sarà utilizzata mooooolto poco), avrei pensato di gestirla in questo modo:

public void ConfigureServices(IServiceCollection services)
        {
services.AddTransient<SmtpClient>((serviceProvider) =>
            {
                var config = serviceProvider.GetRequiredService<IConfiguration>();
                return new SmtpClient()
                {
                    Host = config.GetValue<String>("Email:Smtp:Host"),
                    Port = config.GetValue<int>("Email:Smtp:Port"),
                    Credentials = new NetworkCredential(
                            config.GetValue<String>("Email:Smtp:Username"),
                            Utility.DeCrypt(config.GetValue<String>("Email:Smtp:Password"))
                        )
                };
            });
        }


        [HttpPost]
        public async Task<IActionResult> PasswordRecovery()
        {
            using (var smtpClient = HttpContext.RequestServices.GetRequiredService<SmtpClient>())
            {
//....
                bl.PasswordRecovery(smtpClient);               
//.....
return Ok("OK");
            }
        }



In questo modo specifico un DI che però andrò ad utilizzare solo quando esplicitamente richiesta, anzichè utilizzarla sempre.
In alternativa potrei direttamente instazione la classe li, senza usare la DI.


Secondo voi quale è la soluzione migliore?


Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Federico,
usa sempre la dependency injection, anche in questo caso.


E' l'unico caso in cui uso la mail (quindi sarà utilizzata mooooolto poco)

Non fa niente, ha comunque una sua dignità e quindi va registrata come servizio. Usare AddTransient va bene, però vedo che stai creando tu l'istanza a mano con return new SmtpClient(). Tecnicamente puoi farlo... però ho come l'impressione che tu non abbia compreso come creare una gerarchia di componenti: controller che dipende da SmtpClient che dipende da un altro servizio in grado di fornirgli le opzioni di configurazione SMTP. Quindi ecco un esempio pari pari come serve a te, vedi se riesci ad aggiungerlo al tuo progetto. In questo modo potrai togliere la logica di creazione dell'istanza dell'SmtpClient dalla classe Startup.

https://forum.aspitalia.com/forum/post/420254/.NET-Core-2.1-Accedere-AppSettings-Classe.aspx

Ciao,
Moreno

Enjoy learning and just keep making
144 messaggi dal 26 febbraio 2007
grazie mille, sempre di grande aiuto... vado subito a leggere!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.