ASP .NET Core MVC - Criando uma aplicação web no Linux - I

 Neste artigo vamos criar uma aplicação ASP .NET Core MVC no ambiente Linux. A seguir vamos criar uma imagem Docker para esta app e criar um contêiner com a imagem.

Vamos começar configurando o ambiente Linux e depois eu vou mostrar como criar a aplicação Web MVC usando a ferramenta de linha de comando NET CLI e o Visual Studio Code.

O ambiente Linux

Para este exemplo eu vou usar no ambiente Linux a distro Ubuntu 18.04.1 LTS. É uma máquina física, mas você pode criar uma máquina virtual (Vide VirtualBox) que vai funcionar do mesmo jeito.

Instalando o .NET Core SDK 2.1

O .NET Core é o novo Framework open-source e multiplataforma da Microsoft.

Você tem que instalar a última versão estável no seu ambiente Linux.

Neste link você obtém a última versão estável do .NET Core que é a 2.1.403. Selecione a sua distribuição do Linux e siga as instruções para instalar no seu ambiente Linux.

Instalando o Visual Studio Code

O Visual Studio Code é o editor de códigos da Microsoft open-source e multiplataforma.

Para instalar o VS Code para Linux acesse o link : https://code.visualstudio.com/download escolha a sua distro Linux e siga as instruções.

Após instalar o VS Code você tem que instalar as seguintes extensões no VS Code para poder trabalhar com a linguagem C# :

  1. C#
  2. C# Extensions
  3. vscode-icons (*) - Para usar associar ícones aos arquivos

Acima vemos as extensões instaladas no VS Code que eu estou usando.

Criando o projeto ASP .NET Core MVC

Abra um terminal de comandos no Linux e crie uma pasta onde o projeto vai ser armazenado usando os comandos mkdir para criar e cd para navegar entre as pastas.

Para o exemplo deste artigo eu crie uma pasta projetos e dentro dela outra pasta App1 onde vou criar o projeto ASP .NET Core MVC.

- mkdir projetos
- cd projetos
- mkdir App1
- cd App1

Posicionado na pasta App1 onde vai criar o projeto digite o comando para criar o projeto ASP .NET Core MVC usando a ferramenta de linha de comando NET CLI:

dotnet new mvc

Este comando cria um projeto na pasta atual com o mesmo nome da pasta.

Digite o comando para exibir o conteúdo da pasta : ls -g

Vemos os arquivos e pastas do projeto criados na pasta atual.

Vamos abrir o código do projeto no Visual Studio Code digitando :  code .

Vemos acima o projeto aberto no VS Code no Linux e o arquivo de projeto .csproj mostrando as referências.

Vemos também a estrutura do projeto ASP .NET Core MVC contendo as pastas:

E o arquivo Startup.cs onde estão os métodos para configurar a aplicação que vamos ajustar.

Criando o nosso modelo de dados

Como nossa aplicação é bem simples e vai gerenciar informações de produtos ela vai ter apenas uma entidade chamada Produto.

Vamos agora criar  a classe que representa a nossa entidade na pasta Models do projeto.

Nota: Você pode colocar classes do modelo em qualquer lugar em seu projeto, mas a pasta Models é usada por convenção.

As classes são criadas na pasta Models clicando com o botão direito sobre a pasta, selecionando New C# Class e a seguir informando o nome da classe.

Vamos iniciar criando o arquivo Produto.cs e nele vamos definir a classe Produto conforme abaixo:

public class Produto
{
        public Produto (string nome=null, string categoria=null, decimal preco=0)
        {
            this.Nome = nome;
            this.Categoria = categoria;
            this.Preco = preco;
         }
        public int ProdutoId { get; set; }
        public string Nome { get; set; }
        public string Categoria {get; set; }
        public decimal Preco {get; set; }
}

A propriedade ProdutoId será a coluna de chave primária da tabela de banco de dados que corresponde a essa classe.

Neste exemplo, inicialmente não vamos usar um banco de dados para tornar mais simples o exemplo. Vamos criar um repositório fictício com dados de teste estáticos para começar, e, depois, podemos substituí-lo por uma implementação que acesse um banco de dados real.

Vamos criar uma interface chamada IRepository.cs na pasta Models com o código abaixo:

Essa interface fornece acesso a uma coleção de objetos Produto por meio de uma propriedade chamada Produtos.  Para um projeto real o repositório deveria dar suporte a poder crair e modificar objetos, mas para o nosso exemplo, o acesso somente leitura é suficiente para exibir a página de produtos e depois fazermos o deploy e criar a imagem no Docker.

Para fornecer os dados de teste para a nossa aplicação vamos incluir um arquivo chamado TesteRepository.cs na pasta Models com o código abaixo:

A classe TesteRepository implementa a classe IRepository, e sua propriedade Produtos retorna um
coleção de objetos Produto criados com dados estáticos. São dados fictícios que podemos substituir por uma implementação que acessa um banco de dados real.

Registrando o repositório com injeção de dependência

A ASP.NET Core implementa a injeção de dependência por padrão. Os serviços são registrados com injeção de dependência durante a inicialização do aplicativo. Componentes que requerem esses serviços (como controladores MVC) fornecem esses serviços através de parâmetros do construtor.

Para registrar a implementação do nosso repositório como um serviço, abra o arquivo Startup.cs e adicione a linha destacada ao método ConfigureServices:


// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { ... services.AddTransient<IRepository, TesteRepository>(); );
            // Add framework services.
            services.AddMvc();
        }
....

Na implementação da Injeção de dependência do ASP.NET Core, vemos o conceito de lifetimes ou "tempo de vidas". Um lifetime ou tempo de vida especifica quando um objeto DI-injetado é criado ou recriado. Existem três possibilidades:

  1. - Transient : Criado a cada vez que são solicitados.
  2. - Scoped: Criado uma vez por solicitação.
  3. - Singleton: Criado na primeira vez que são solicitados. Cada solicitação subseqüente usa a instância que foi criada na primeira vez.

O parâmetro IServiceCollection permite configurar diferentes tipos de serviços, seja por criação de objeto ou correspondência a uma interface específica, e suporta os lifetimes mencionados.

No nosso exemplo usamos o lifetime Transient e informando que quando tivermos uma referência a uma instância da interface queremos que seja injetado a instância da classe concreta.

Definindo o Controlador e a View

Vamos agora ajustar o controlador HomeController que já existe na pasta Controllers , injetando o serviço do nosso repositório no construtor e alterando o código do método Action Index para retornar uma lista de produtos para a view.

Abra o arquivo HomeController.cs e altere o código conforme abaixo:

A seguir vamos alterar o código da view Index.cshtml que esta na pasta \Views\Home conforme abaixo:

Pronto.

Agora podemos executar o nosso projeto digitando no terminal estando na pasta do projeto :

dotnet run

Abrindo o navegador padrão em http://localhost:5000 iremos obter o seguinte resultado:

Vemos assim nossa view Index.cshtml exibir a relação de produtos definida em nosso repositório fake.

Temos assim uma aplicação ASP .NET Core MVC bem simples que podemos usar para criar uma imagem no Docker.

Pegue o projeto completo aqui : AppWebLinux.tar.gz

Veja a continuação deste artigo usando um banco de dados MySql.

Acompanhe a criação da imagem no Docker neste artigo:  Criando uma imagem Docker

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti