Organizando a Startup de uma aplicação ASP.NET Core Web Application.
Published: 2021-08-23 20:55:39

Neste pequeno artigo abordarei um assunto simples, mas que pode ajudar inúmeros desenvolvedores a deixar a sua aplicação um pouco mais organizada. Com o uso de [Métodos de extensão](https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/classes-and-structs/how-to-implement-and-call-a-custom-extension-method) podemos deixar nossa classe Startup de uma aplicação em ASP.NET Core bem organizada e fácil de entender.

Vou utilizar nos exemplos a seguir, uma API criada em ASP.NET Core 3.1.

Quando iniciamos um projeto, seja ele para um cliente especifico, testes para empresas ou uso pessoal, precisamos configurar uma serie de serviços na classe Startup.cs, um exemplo clássico é a configuração do Entity Framework um ORM (Object Relational Mapping), que nos ajuda na abstração entre a aplicação e o banco de dados, explicando de uma forma “BEM RESUMIDA”.

Um exemplo de configuração seria este:

![Imagem mostrando a a classe estartup configurando uma connection string de banco de dados](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4e9pdxtviyqd0ey6bplg.png)

Dentro do método **ConfigureServices** na classe Startup registramos nosso contexto de banco de dados, indicando que estamos utilizando o MySQL e apontando para nossa string de conexão chamada **DefaultConnection** que está localizada no arquivo **appsettings.json.**

Até ai tudo bem, temos apenas um serviço sendo registrado, mas e quando isso começar a escalar? O que podemos fazer?

Imaginem um cenário onde nós temos uma aplicação divida em camadas, sendo elas, uma camada de “Data”, “Business” e “App”, onde cada uma terá sua responsabilidade. Na camada de “Data” nós temos todas as nossas classes de repositórios e suas respectivas interfaces, logo precisamos registrar na aplicação esses repositórios para utiliza-los com **injeção de dependência.**

Na classe Startup.cs a injeção de dependência desses repositórios ficariam dessa forma(não necessariamente é a única forma de se fazer):

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xxe32ucvp8w59jg37xl1.png)

Se por necessidade nossa aplicação conter muitas classes de repositórios, a classe Startup.cs começa a ficar muito grande, dificultando seu entendimento e possíveis manutenção.

Uma solução muito interessante para resolver isso é removendo essa implementação da classe Startup.cs, utilizando de **Métodos de extensão.**

Criaremos um local próprio na nossa aplicação, que terá a responsabilidade de registrar e configurar os serviços que forem necessários.

Inicialmente precisamos criar uma classe de configuração. Conforme o exemplo a seguir.

Na camada de aplicação criei uma classe chamada **DependecyInjectionConfiguration,** nela implementei um método de extensão da interface **IServiceCollection,** encapsulando a injeção de dependência dos repositórios, ficando da seguinte forma:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/55l12yg7rsisp2qfmlrf.png)

Na classe Startup.cs dentro do método ConfigureServices precisamos apenas chamar este método da seguinte maneira:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5y6ids69ydk7b4jqkxbm.png)

É isso pessoal, esse foi meu primeiro artigo e espero que possa ajudar o máximo de pessoas possível.

Aceito toda e qualquer crítica construtiva que possa ajudar a trazer um conteúdo de melhor qualidade.

Me segue lá no [YouTube](https://www.youtube.com/channel/UC0Vo6yL26XaraIjak87jDww?view_as=subscriber) e no [Twitter](https://twitter.com/wmscode) que logo vou começar a postar vídeos sobre programação com ASP.NET Core, Angular e entre outras coisas.

Obrigado! Fui e **#boraaaaaaa!**