https://a.storyblok.com/f/270183/29789/0451e71394/simplifying-dependency-injection.png

Simplificando a injeção de dependências no .NET

Publicado em October 24, 2023

Tempo de leitura: 2 minutos

Olá, colegas desenvolvedores!

Temos novidades empolgantes para compartilhar sobre nosso SDK do .NET! Acabamos de lançar um novo recurso fantástico que vai facilitar muito a vida de vocês. Vocês sabem como a inicialização do cliente costumava ser um pouco chata, né? Pois é, não precisam mais se preocupar!

Desde a versão v6.4.0, integramos uma solução que simplifica todo o processo. Agora, você pode usar um método de extensão bacana para registrar nosso cliente no contêiner padrão de injeção de dependências do ASP.NET. Ficou curioso? Continue lendo para saber mais!

Inicialização padrão do cliente

Imagine que gostaríamos de usar Meetings API . Teríamos que inicializar uma instância do cliente principal (VonageClient) para buscar o MeetingsClient.

Credentials credentials = ...
VonageClient vonageClient = new VonageClient(credentials);
IMeetingsClient meetingsClient = vonageClient.MeetingsClient;

É realmente bem simples, já que o cliente espera apenas que um Credentials objeto seja criado. Até agora, nada de novo; você já passou por isso.

Mesmo sendo relativamente fácil, isso tem algumas desvantagens:

  • Você deve criar um VonageClient enquanto você só precisa de um IMeetingsClient

  • Você cria um acoplamento desnecessário à VonageClient implementação, o que torna seu código mais difícil de testar

E tem mais: se você quiser injetar qualquer um dos nossos clientes, precisa registrar todos eles no seu contêiner. Manualmente.

Definitivamente, há espaço para algumas melhorias.

Inscreva-se no nosso Registro DI!

Bom, vamos direto ao que interessa! Com nosso novo método de extensão, você não precisa mais fazer isso.

Veja como é fácil de usar:

using Microsoft.Extensions.DependencyInjection;
using Vonage;
using Vonage.Extensions;

// ...

public void ConfigureServices(IServiceCollection services)
{
    //...

    // Initialize credentials
    Credentials credentials = ...
    // Register our clients with a 'Transient' lifetime...
    services.AddVonageClientTransient(credentials);
    // Or a 'Scoped' lifetime
    services.AddVonageClientScoped(credentials);

    // ...
}

É isso aí!

Ele depende de Contêiner de Injeção de Dependências (DI) do ASP.NET do Microsoft.Extensions.DependencyInjection, o que significa que é compatível desde que você esteja lidando com uma IServiceCollection instância. Isso é fornecido por padrão no ASP.NET WebAPI e WebApp, mas você também pode integrá-lo a ConsoleApps e Services.

Você pode escolher entre duas ServiceLifetime opções:

  • Transient: os objetos são sempre diferentes

  • Scoped: os objetos são os mesmos para uma determinada solicitação, mas diferem entre cada nova solicitação

Ao chamar services.AddVonageClient{lifetime}, você está instruindo o contêiner de DI a configurar o VonageClient para você.

Agora você pode aproveitar a resolução de dependências com o cliente principal ou com qualquer subcliente:

[ApiController]
[Route("[controller]")]
public class VonageController : ControllerBase
{
    ...

    public VonageController(VonageClient client) => this.client = client;
}

[ApiController]
[Route("[controller]")]
public class VonageController : ControllerBase
{
    ...

    public VonageController(IMeetingsClient client) => this.client = client;
}

Conclusão

Temos orgulho de tornar sua jornada como desenvolvedor mais tranquila com novas melhorias que facilitam o dia a dia. Nunca foi tão fácil integrar nosso SDK às suas aplicações .NET.

E adivinhem só? Seus comentários e contribuições são importantes para nós!

Então, fique à vontade para acessar nosso repositório no GitHub para relatar problemas, sugerir melhorias ou até mesmo enviar suas pull requests. Se tiver alguma dúvida, junte-se a nós no Slack dos desenvolvedores da Vonage, e entraremos em contato com você.

Boa programação, amigos!

Compartilhar:

https://a.storyblok.com/f/270183/384x384/fdffb72c8b/guillaume-faas.png
Guillaume FaasEx-funcionários da Vonage

Guillaume é um ex-membro da equipe da Vonage. Ele atuou como Promotor Sênior de Desenvolvimento .NET na Vonage. Trabalha com .NET há quase 15 anos, tendo se dedicado, nos últimos anos, à promoção do Software Craftsmanship. Seus temas favoritos incluem qualidade de código, automação de testes, mobbing e code katas. Fora do trabalho, ele gosta de passar tempo com a esposa e a filha, malhar ou jogar videogame.