Exercício - Registar e consumir serviços
ASP.NET aplicativos principais 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 interno para gerenciar os serviços que um aplicativo usa.
Sua equipe lidera tarefas para criar um site barebones 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 em componentes que precisam dele.
Criar uma aplicação 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 C# Dev Kit no Visual Studio Code.
Abra o Visual Studio Code.
Pressione Ctrl+Shift+P para abrir a paleta de comandos.
Procure e selecione .NET: Novo Projeto....
Procure e selecione ASP.NET Core Empty.
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
Solution Explorerpainel para exibir os arquivos do projeto.
Executar a aplicação
Teste o aplicativo para garantir que ele seja executado.
No Visual Studio Code, pressione F5 para criar 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.
Este 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 pare o aplicativo pressionando Shift+F5 no Visual Studio Code.
Criar um serviço
Agora que você tem um aplicativo funcionando, vamos criar um serviço que gera uma mensagem de boas-vindas para a página principal.
Clique com o botão direito do mouse no projeto MyWebApp no painel Explorer . Selecione Nova pasta. Nomeie a pasta Serviços.
Clique com o botão direito do rato na pasta Serviços . Selecione Novo arquivo. Nomeie o arquivo WelcomeService.cs.
Substitua o conteúdo do 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
WelcomeServiceclasse com umGetWelcomeMessagemétodo que 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
_serviceCreatedcampos e_serviceIdsão definidos no construtor e nunca mudam durante o tempo de vida da instância de serviço.
Registar o serviço
Agora que você tem um serviço, você precisa registrá-lo com o contêiner de serviço.
Abra o arquivo Program.cs .
Adicione a seguinte diretiva à parte superior do arquivo:
using MyWebApp.Services;Esta diretiva resolve a referência à
WelcomeServiceclasse.Imediatamente após a
var builder = WebApplication.CreateBuilder(args);linha, adicione o seguinte código:builder.Services.AddSingleton<WelcomeService>();WebApplication.CreateBuildercria uma nova instância daWebApplicationBuilderclasse chamadabuilder. O código anterior registra aWelcomeServiceclasse com o contêiner de serviço com um tempo de vida singleton.Altere a
app.MapGet("/", () => "Hello World!");linha para o seguinte código:app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Esse código mapeia
/uma solicitação HTTP GET para a URL raiz (WelcomeService) para um delegado que retorna a mensagem de boas-vindas gerada pelo serviço.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();
Testar as alterações
- Salve todas as suas alterações e execute o aplicativo como antes.
- Quando a janela do navegador for aberta, observe que a URL raiz exibe a mensagem de boas-vindas gerada pelo
WelcomeServiceserviço. - Feche a janela do navegador e pare o aplicativo pressionando Shift+F5 no Visual Studio Code.
Usar 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 Explorer . Selecione Nova pasta. Nomeie a pasta Interfaces.
Clique com o botão direito do rato na pasta Interfaces . Selecione Novo arquivo. Nomeie o arquivo IWelcomeService.cs.
Substitua o conteúdo do IWelcomeService.cs pelo seguinte código:
namespace MyWebApp.Interfaces public interface IWelcomeService { string GetWelcomeMessage(); }Este código define uma
IWelcomeServiceinterface com umGetWelcomeMessagemétodo. Todos os serviços que implementam essa interface devem fornecer uma implementação para oGetWelcomeMessagemétodo.Abra o arquivo Serviços/WelcomeService.cs .
Adicione a seguinte diretiva à parte superior do arquivo:
using MyWebApp.Interfaces;Esta diretiva resolve a referência à interface adicionada
IWelcomeServicena próxima etapa.Atualize a declaração de
WelcomeServiceclasse para implementar aIWelcomeServiceinterface:public class WelcomeService : IWelcomeServiceEsta é a única alteração que você precisa fazer na
WelcomeServiceclasse para implementar aIWelcomeServiceinterface. AWelcomeServiceclasse já tem umGetWelcomeMessagemétodo que corresponde à assinatura doIWelcomeServicemétodo na interface.Abra o arquivo Program.cs .
Atualize a
builder.Services.AddSingleton<WelcomeService>();linha para o seguinte código:builder.Services.AddSingleton<IWelcomeService, WelcomeService>();Esse código registra a
WelcomeServiceclasse com o contêiner de serviço usando aIWelcomeServiceinterface.Gorjeta
Pense nisso como dizendo: "Quando um componente pedir um
IWelcomeService, forneça uma instância deWelcomeService."Atualize a
app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());linha para o seguinte código:app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage());A função anônima agora espera um
IWelcomeServiceem vez de umWelcomeServicearquivo .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();
Testar as alterações
Vamos testar o aplicativo para garantir que ele ainda funcione conforme o esperado.
- Salve todas as suas alterações e execute o aplicativo como antes.
- Quando a janela do navegador for aberta, observe que a URL raiz exibe a mensagem de boas-vindas gerada pelo
WelcomeServiceserviço. - Deixe o aplicativo em execução para o próximo exercício.