Exercício - Cadastre-se e consuma serviços
Os aplicativos ASP.NET Core geralmente precisam acessar os mesmos serviços em vários componentes. O ASP.NET Core usa um contêiner de injeção de dependência integrado para gerenciar os serviços que um aplicativo usa.
O líder da sua equipe lhe incumbe de criar um site básico para sua empresa. O site deve exibir uma mensagem de boas-vindas na página principal. Você decide criar um serviço para gerar a mensagem de boas-vindas. Em seguida, você registrará o serviço no contêiner de serviço para que ele possa ser injetado nos componentes que precisam dele.
Criar um aplicativo ASP.NET Core
Você precisa de um aplicativo ASP.NET Core para desempenhar o papel do aplicativo da sua equipe. Vamos criar um novo aplicativo ASP.NET Core usando a extensão Kit de Desenvolvimento em C# no Visual Studio Code.
Inicie o Visual Studio Code.
Pressione Ctrl+Shift+P para abrir a paleta de comandos.
Pesquise e selecione .NET: Novo Projeto....
Pesquise e selecione ASP.NET Núcleo Vazio.
Selecione ou crie uma pasta para o novo projeto.
Nomeie o novo aplicativo MyWebApp.
Selecione Criar projeto para criar o projeto.
Quando o novo projeto for aberto, expanda o painel
Solution Explorerpara exibir os arquivo do projeto.
Executar o aplicativo
Teste o aplicativo para garantir que ele seja executado.
No Visual Studio Code, pressione F5 para compilar e executar o aplicativo.
- Quando solicitado, selecione C# como o depurador.
- Quando solicitado, selecione C#: MyWebApp [Configuração Padrão] como a configuração de inicialização a ser usada.
Esse comando inicia o aplicativo e o hospeda em um servidor Web local. Uma janela do navegador é aberta e exibe, “Olá, Mundo!”
Feche a janela do navegador e interrompa o aplicativo pressionando Shift+F5 no Visual Studio Code.
Criar um serviço
Agora que você tem um aplicativo funcional, vamos criar um serviço que gere uma mensagem de boas-vindas para a página principal.
Clique com o botão direito do mouse no projeto MyWebApp no painel Do Explorer . Selecione Nova Pasta. Nomeie a pasta Serviços.
Clique com o botão direito do mouse na pasta Serviços . Selecione Novo Arquivo. Nomeie o arquivo WelcomeService.cs.
Substitua o conteúdo de WelcomeService.cs pelo seguinte código:
namespace MyWebApp.Services; public class WelcomeService : IWelcomeService { DateTime _serviceCreated; Guid _serviceId; public WelcomeService() { _serviceCreated = DateTime.Now; _serviceId = Guid.NewGuid(); } public string GetWelcomeMessage() { return $"Welcome to Contoso! The current time is {_serviceCreated}. This service instance has an ID of {_serviceId}"; } }Esse código define uma classe
WelcomeServicecom um métodoGetWelcomeMessageque gera uma mensagem de boas-vindas. A mensagem inclui a hora atual em que o serviço foi criado, bem como um identificador exclusivo para cada instância do serviço.Observe que os campos
_serviceCreatede_serviceIdsão definidos no construtor e nunca mudam durante o tempo de vida da instância do serviço.
Registrar o serviço
Agora que você tem um serviço, precisa registrá-lo no contêiner de serviço.
Abra o arquivo Program.cs .
Adicione a seguinte diretiva para a parte superior do arquivo:
using MyWebApp.Services;Essa diretiva resolve a referência à classe
WelcomeService.Imediatamente após a linha
var builder = WebApplication.CreateBuilder(args);, adicione o seguinte código:builder.Services.AddSingleton<WelcomeService>();WebApplication.CreateBuildercria uma nova instância da classeWebApplicationBuilderchamadabuilder. O código anterior registra a classeWelcomeServicecom o contêiner de serviço com um tempo de vida singleton.Altere a linha
app.MapGet("/", () => "Hello World!");para o seguinte código:app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Esse código mapeia uma solicitação HTTP GET para a URL raiz (
/) para um delegado que retorna a mensagem de boas-vindas gerada pelo serviçoWelcomeService.Seu arquivo Program.cs deve ter esta aparência:
using MyWebApp.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<WelcomeService>(); var app = builder.Build(); app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); app.Run();
Teste as mudanças
- Salve todas as alterações e execute o aplicativo como antes.
- Quando a janela do navegador abrir, observe que a URL raiz exibe a mensagem de boas-vindas gerada pelo serviço
WelcomeService. - Feche a janela do navegador e interrompa o aplicativo pressionando Shift+F5 no Visual Studio Code.
Use uma interface
Sua equipe analisa seu código e outro desenvolvedor sugere que você use uma interface para registrar serviços, pois essa abordagem torna o código mais flexível e fácil de manter.
Clique com o botão direito do mouse no projeto MyWebApp no painel Do Explorer . Selecione Nova Pasta. Nomeie a pasta Interfaces.
Clique com o botão direito do mouse na pasta Interfaces . Selecione Novo Arquivo. Nomeie o arquivo IWelcomeService.cs.
Substitua o conteúdo de IWelcomeService.cs pelo seguinte código:
namespace MyWebApp.Interfaces public interface IWelcomeService { string GetWelcomeMessage(); }Esse código define uma interface
IWelcomeServicecom um métodoGetWelcomeMessage. Todos os serviços que implementam essa interface devem fornecer uma implementação para o métodoGetWelcomeMessage.Abra o arquivo Serviços/WelcomeService.cs .
Adicione a seguinte diretiva para a parte superior do arquivo:
using MyWebApp.Interfaces;Essa diretiva resolve a referência à interface
IWelcomeServiceque você adiciona na próxima etapa.Atualize a declaração da classe
WelcomeServicepara implementar a interfaceIWelcomeService:public class WelcomeService : IWelcomeServiceEssa é a única alteração que você precisa fazer na
WelcomeServiceclasse para implementar aIWelcomeServiceinterface. A classeWelcomeServicejá tem um métodoGetWelcomeMessageque corresponde à assinatura do método na interfaceIWelcomeService.Abra o arquivo Program.cs .
Atualize a linha
builder.Services.AddSingleton<WelcomeService>();para o seguinte código:builder.Services.AddSingleton<IWelcomeService, WelcomeService>();Esse código registra a classe
WelcomeServicecom o contêiner de serviço usando a interfaceIWelcomeService.Dica
Pense nisso como se dissesse: "Quando um componente solicita um
IWelcomeService, forneça uma instância deWelcomeService."Atualize a linha
app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());para o seguinte código:app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage());A função anônima agora espera um
IWelcomeServiceem vez de umWelcomeService.Seu arquivo Program.cs deve ter esta aparência:
using MyWebApp.Interfaces; using MyWebApp.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<IWelcomeService, WelcomeService>(); var app = builder.Build(); app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); app.Run();
Teste as mudanças
Vamos testar o aplicativo para ter certeza de que ele ainda funciona conforme o esperado.
- Salve todas as alterações e execute o aplicativo como antes.
- Quando a janela do navegador abrir, observe que a URL raiz exibe a mensagem de boas-vindas gerada pelo serviço
WelcomeService. - Deixe o aplicativo em execução para o próximo exercício.