Injeção de dependência com Blazor

E aí galera! Tudo certo?

Hoje vamos falar novamente sobre o Blazor, dessa vez o post é rapidinho e vamos falar sobre injeção de dependência! Bora!

Caso você ainda esteja um pouco perdido e não saiba o que é o Blazor, sugiro que você veja esse post aqui.

Injeção de dependência

Se você ainda nunca ouviu falar sobre isso, vou dar um breve resumo: injeção de dependência é uma técnica utilizada para manter o baixo acoplamento entre objetos. Fazendo com que os objetos dependam apenas de abstrações (Interfaces por exemplo) e não de objetos de “baixo nível”.

Injeção de dependência no Blazor

No Blazor, o mecanismo de injeção de dependência é baseado na interface System.IServiceProvider do .NET.

Como utilizar?

Para utilizar a injeção de dependência no Blazor, precisamos configurar quais serviços vamos utilizar no método Main, dentro de Program.cs. E depois injetala utilizando a diretiva @inject. Para exemplificar, vamos fazer uma classe que gera números aleatórios e injetá-la em um componente.

Criei uma pasta chamada “Services“, e dentro dela a classe “GeradorDeNumeros” que tem o seguinte código:


using System;
namespace BlazorExample.Services
{
public class GeradorDeNumeros
{
public int GerarNumero(int numeroInicial, int numeroFinal)
{
var random = new Random();
return random.Next(numeroInicial, numeroFinal);
}
}
}

Logo após, inseri no arquivo “_ViewImports.cshtml” a seguinte linha de código, que serve para “registrar” o namespace da minha classe, para poder utilizá-la sem precisar colocar o nome inteiro toda vez:


@using BlazorExample.Services

E então, registrei o serviço dentro do método “Main” na classe “Program” da seguinte maneira:


static void Main(string[] args)
{
var serviceProvider = new BrowserServiceProvider(configure =>
{
configure.Add(ServiceDescriptor.Singleton(new GeradorDeNumeros()));
});
new BrowserRenderer(serviceProvider).AddComponent<App>("app");
}

view raw

Program.cs

hosted with ❤ by GitHub

Nesse exemplo, estamos instanciando a classe como um Singleton, que manterá apenas uma instância dessa classe. Fiz dessa maneira por fins didáticos, só para o exemplo; o tipo utilizado depende de cada situação que temos em nossas aplicações.

Por fim, vamos fazer o componente que vai utilizar a nossa classe, ele ficou escrito dessa maneira:


@page "/gerar-numero"
@inject GeradorDeNumeros GeraNumeros
<h1>Gerador de números aleatórios</h1>
<h3>O numero gerado foi @numero</h3>
@functions {
int numero;
protected override async Task OnInitAsync()
{
numero = GeraNumeros.GerarNumero(1, 1000);
}
}

view raw

Gerador.cshtml

hosted with ❤ by GitHub

Vamos reparar em algumas coisas:

    • A diretiva @inject na linha 2 faz com que utilizemos a instância da classe “GeradorDeNumeros” que vai pra variável “GeraNumeros“;
    • Se não tivéssemos colocado a referência da classe no arquivo “_ViewImports.cshtml” teríamos que colocar o namespace também, e o código ficaria assim:
      • @inject Services.GeradorDeNumeros GeraNumeros
    • A chamada do método está na linha 14, onde preenchemos a variável “numero” com o retorno.

O resultado final é esse:

blazor-numeros

Tranquilo de mais né galera?

Fiquem ligados por aqui que logo logo vamos fazer uma todo list para exercitar!

Os exemplos de código estão disponíveis no GitHub: https://github.com/vmussak/blazor-examples

Referências

O post foi inspirado por esse conteúdo aqui:

Por hoje é só, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀

 

Advertisement

One thought on “Injeção de dependência com Blazor

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s