Usando Keyed Services no .Net 8

Marcio Nizzola
2 min readMay 9, 2024

--

Usando Keyed Services no .Net 8

O .NET 8 introduziu a possibilidade de “dar nomes” aos serviços e assim podermos obter através de injeção de dependência através de uma referência que pode ser um nome, número, enum, objeto.

Exemplo 1: utilizando strings para definir os nomes

instanciando no program.cs a injeção de dependência usando keyed services
consumindo a injeção de dependência com keyed services em minimal api

Um ponto fraco é a possibilidade de haver divergência, além do que ficar criando strings pelo código não é nada bonito e gera redundância desnecessária !

Melhorando

Exemplo 2: aqui ao invés de um literal, colocamos um Enum para que o nome seja identificado de forma única evitando assim um erro ao digitar a palavra chave para obtenção.

instanciando no program.cs a injeção de dependência usando keyed services
consumindo a injeção de dependência com keyed services em minimal api

Neste caso criamos um Enum com propriedades que identificam o serviço

enum utilizado para nomear os serviços

Utilidade

Tá ok, mas qual a utilidade prática em utilizar isso?

Digamos que em alguns casos tenhamos uma interface sendo utilizada para gerar inúmeros serviços que possuem métodos com o mesmo nome mas que tem internamente resultados diferentes, neste caso fica melhor instanciá-los desta forma, pois através do nome podemos diferenciá-los:

Exemplo 3

instanciando no program.cs a injeção de dependência usando keyed services

Nomes em constantes literais

criando uma classe com constantes para nomear os serviços

Com uso de Controller

consumindo a injeção de dependência com keyed services em um controller

Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !! Quer ver mais conteúdos, acesse minhas redes através do Linktree: https://linktree.com/nizzola

--

--

Marcio Nizzola
Marcio Nizzola

Written by Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.

No responses yet