Injeção de dependência
Postado em : 09/03/2023
Injeção de dependência
O que é a injeção de dependência em C#?
Em C#, a injeção de dependência é uma técnica utilizada para permitir que uma classe dependente receba suas dependências por meio de um construtor, propriedade ou método. Isso significa que a classe dependente não precisa criar as suas dependências, mas sim recebê-las de uma outra classe. A injeção de dependência é implementada por meio de um contêiner de injeção de dependência, que é responsável por gerenciar a criação e a entrega das dependências para as classes que precisam delas.
Por que usar a injeção de dependência em C#?
A injeção de dependência em C# traz muitos benefícios para um projeto de software, incluindo:
-
Redução do acoplamento: Com a injeção de dependência, as classes dependem apenas de interfaces, e não de implementações concretas. Isso significa que as classes podem ser alteradas sem afetar as outras classes do projeto.
-
Maior testabilidade: Com a injeção de dependência, é possível injetar objetos de teste em uma classe dependente, o que torna mais fácil testar essa classe isoladamente.
-
Modularidade: A injeção de dependência torna o projeto mais modular, pois as classes podem ser facilmente substituídas ou removidas sem afetar o restante do projeto.
Como implementar a injeção de dependência em C# ?
A implementação da injeção de dependência em C# envolve as seguintes etapas:
-
Definir as interfaces: É necessário definir as interfaces que serão utilizadas pelas classes dependentes.
-
Implementar as classes: As classes que implementam as interfaces definidas anteriormente devem ser implementadas.
-
Configurar o contêiner de injeção de dependência: É necessário configurar o contêiner de injeção de dependência com as classes que implementam as interfaces definidas anteriormente.
-
Injetar as dependências: As dependências devem ser injetadas nas classes dependentes por meio de um construtor, propriedade ou método.
Vamos agora ver um exemplo prático de como implementar a injeção de dependência em C#.
Exemplo prático de injeção de dependência em C
Suponha que temos uma classe "Calculadora" que depende de uma outra classe "Logger" para registrar os cálculos realizados. Em vez de criar uma instância da classe "Logger" dentro da classe "Calculadora", podemos injetar a dependência por meio de um construtor.
Vamos ver como ficaria a implementação da classe "Calculadora":
public class Calculadora { private readonly ILogger _logger; public Calculadora(ILogger logger) { _logger = logger; } public int Soma(int a, int b) { _logger.Log($"Calculando a soma de {
Implementando a injeção de dependência em C#, basta seguir os seguintes passos:
1) Crie uma interface para a dependência que deseja injetar. Por exemplo:
public interface IExemploDependencia { void MetodoExemplo(); }
2) Crie uma classe que implemente essa interface. Por exemplo:
public class ExemploDependencia : IExemploDependencia { public void MetodoExemplo() { Console.WriteLine("Método exemplo da dependência foi chamado."); } }
3) Na classe que depende da dependência, adicione um construtor que aceite a interface como um parâmetro. Por exemplo:
public class ClasseDependente { private readonly IExemploDependencia _exemploDependencia; public ClasseDependente(IExemploDependencia exemploDependencia) { _exemploDependencia = exemploDependencia; } public void MetodoQueUsaDependencia() { _exemploDependencia.MetodoExemplo(); } }
4) Configure o container de injeção de dependência para fornecer a implementação da dependência quando a interface for solicitada. Por exemplo, usando o contêiner nativo do .NET, você pode fazer o seguinte:
var container = new Container(); container.Register<IExemploDependencia, ExemploDependencia>();
5) Em seguida, você pode usar o contêiner para criar uma instância da classe que depende da dependência e a dependência será injetada automaticamente. Por exemplo:
var classeDependente = container.GetInstance<ClasseDependente>(); classeDependente.MetodoQueUsaDependencia(); // Isso deve imprimir "Método exemplo da dependência foi chamado." no console.
O importante é entender o conceito básico, escolher a melhor abordagem. Lembre-se de que existem várias maneiras de implementar a injeção de depenência em C#.
Links Relacionados
- Aprenda a criar sua conta na Microsoft e a Liberar sua copia do Visual Community 2017
- Aprenda a trocar o idioma do Visual Studio 2017
- Arquitetura CQRS
- Arrays em C#(CSharp)
- Aula 01 - Sua primeira aplicação MVC 4 Asp.Net com C#(CSharp) Visual Studio 2013 Olá mundo (Hello Word)
- Aula 14 - Retomando nosso curso em Asp.Net MVC 4 com C#(CSharp)
- Aula 15 - Download das ferramentas necessárias para o nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Aula 16 - Criando o banco de dados e configurando o SQLServer para nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Aula 17 - Criando o banco de dados e configurando o SQLServer EXPRESS para nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Aula 18 - Criando o banco de dados e configurando o MySQL para nosso curso de Asp.Net MVC 4 com C#(CSharp)
- C#(CSharp) Converter inteiro para Hexadecimal e Hexadecimal para Inteiro
- C#(CSharp) Exemplo de Conversão de um List<> de uma classe qualquer para um DataTable.
- C#(CSharp) Função para verificar se um determinado número é Primo
- Calcular Idade C# (CSharp), diferença anos entre duas datas
- Classe com Métodos de extensão C# (CSharp)
- Classe para Ler e Gravar Cookies - Asp.Net MVC 4 com C# (CSharp)
- Classe para tratar valores nulos vindos de nossa Query SQL, C#(CSharp).
- Classes anônimas em C#(CSharp)
- Comando nameof() C#(CSharp)
- Compare duas strings ignorando maiúsculas e minúsculas C#(CSharp).
- Consulta SQLServer com paginação
- Criar Classes Dinâmicas usando DynamicObject e ExpandoObject em C# (CSharp)
- Curso Instalando e configurando o Visual Studio
- Definir o dia em um DateTime.
- DELETE CASCADE no SqlServer
- Desvendando o Poder da Função STRING_AGG no SQL Server para concatenação de dados
- Diferença entre parâmetros REF e OUT em C#(CSharp)
- Download da Extensão Web Essentials para Visual Studio 2019 e Vídeo Aula da Instalação
- Download do Visual Studio Community 2019 e Vídeo Aula #01 da Instalação
- Emitir sons pelo auto-falante do computador em C# (CSharp)
- Estrangulando um monólito C#(CSharp)
- Exemplo de acesso a dados com SQL Server em C#.
- Exemplo de consulta em SqlServer para encontrar uma chave Estrangeira
- Explorando Tipos de Dados Personalizados no SqlServer: Utilidade e Impacto na Performance
- Extensões para DataReader, tratando valores de suas consultas SQL (DataReaderExtensions) C#(CSharp)
- Formatar CEP em C# (CSharp)
- Função para devolver data do próximo dia da semana informado C#(CSharp).
- Gerando números randômicos para sorteio de jogos de azar C#(CSharp)
- Grafana Loki e .NET Framework com C#
- Incrementando e decrementando variáveis em C#(CSharp)
- Instalar e configurar o Report Viewer do Visual Studio 2017
- Ler string de conexão (connectionStrings) do arquivo Web.config Asp.Net MVC co C#(CSharp)
- Link para download da Extensão Web Essentials para Visual Studio 2017 e Vídeo Aula da Instalação
- Link para download do Visual Studio Community 2017 e Vídeo Aula #01 da Instalação
- Métodos de extensão C#
- Não foi possível criar o aplicativo para o simulador. Erro ao iniciar o aplicativo no iPhone ** BUILD FAILED **
- Ordenando um array com o comando OrderBy C#(CSharp)
- Parar um loop foreach usando o comando break C#(CSharp).
- Recuperar a URL da página anterior em Asp.Net C# (CSharp)
- Recuperar a URL da página atual em Asp.Net C# (CSharp)
- Recuperar para código C# (CSharp) o valor de um componente de nossa página
- Retorna o IP da conexão do Cliente em Asp.Net MVC com C# (CSharp)
- Retorna os dados do Navegador do Cliente em Asp.Net MVC com C# (CSharp)
- Salvando CSV com cabeçalho no SQL Server Management Studio
- Separar String de caracteres C#(CSharp)
- Serilog e .NET Framework com C#
- Tipos de dados em C# (CSharp)
- Tipos de dados primitivos em C#(CSharp)
- Validando Valores nulos vindos de nosso Banco de Dados C#(CSharp)
- Validar Modelos com Data Annotation e Windows Form Application C#(CSharp)
- Verificar se uma string é um digito em C# (CSharp)