Explorando o Dependency Injection em .NET Core
7/2/2024, às 3:24:34

O que é Dependency Injection?

Dependency Injection (DI) é um padrão de design que permite a criação de dependências fora de uma classe e fornecê-las para a classe de diferentes maneiras. O DI é fundamental para a construção de aplicações modulares, testáveis e de fácil manutenção.


Configurando o Dependency Injection em .NET Core

O .NET Core tem suporte integrado para DI, facilitando a injeção de dependências em seus serviços e controladores.


Passo 1: Configurar Serviços no Startup.cs

No arquivo Startup.cs, você pode configurar os serviços no método ConfigureServices.

public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IExampleService, ExampleService>();
services.AddScoped<IScopedService, ScopedService>();
services.AddSingleton<ISingletonService, SingletonService>();
services.AddControllersWithViews();
}


Tipos de Ciclo de Vida dos Serviços:

  1. Transient: Criado cada vez que é solicitado.
  2. Scoped: Criado uma vez por requisição.
  3. Singleton: Criado uma vez por aplicação.


Passo 2: Definir Interfaces e Implementações

Crie interfaces e suas implementações para os serviços que deseja injetar.

public interface IExampleService
{
string GetData();
}

public class ExampleService : IExampleService
{
public string GetData()
{
return "Hello from ExampleService!";
}
}


Passo 3: Injetar Serviços em Controladores

Você pode injetar serviços em controladores usando o construtor do controlador.

using Microsoft.AspNetCore.Mvc;

public class HomeController : Controller
{
private readonly IExampleService _exampleService;

public HomeController(IExampleService exampleService)
{
_exampleService = exampleService;
}

public IActionResult Index()
{
var data = _exampleService.GetData();
return View((object)data);
}
}


Passo 4: Injetar Serviços em Componentes Razor (Blazor)

Você também pode injetar serviços em componentes Razor usando a diretiva @inject.

@page "/example"
@inject IExampleService ExampleService

<h3>Example</h3>

<p>@ExampleService.GetData()</p>


Passo 5: Testar a Injeção de Dependência

É essencial testar a injeção de dependência para garantir que os serviços estão sendo resolvidos corretamente. Usar testes de unidade com mocks pode ajudar.

using Moq;
using Xunit;

public class HomeControllerTests
{
[Fact]
public void Index_ReturnsViewWithData()
{
// Arrange
var mockService = new Mock<IExampleService>();
mockService.Setup(s => s.GetData()).Returns("Mocked data");
var controller = new HomeController(mockService.Object);

// Act
var result = controller.Index();

// Assert
var viewResult = Assert.IsType<ViewResult>(result);
Assert.Equal("Mocked data", viewResult.Model);
}
}


Conclusão

Dependency Injection é uma prática essencial para o desenvolvimento de software moderno. Ela promove a separação de responsabilidades e facilita a testabilidade e manutenção do código. O suporte integrado do .NET Core para DI torna mais fácil adotar esse padrão em suas aplicações.


VOCÊ PODE GOSTAR

^

voltar para o top