5.9 KiB
Introdução ao ABP com o AspNet Core MVC Web Application
Este tutorial explica como iniciar o ABP do zero com dependências mínimas. Você geralmente deseja começar com o modelo de inicialização .
Criar um novo projeto
- Crie um novo aplicativo da Web vazio AspNet Core Web Application no Visual Studio:
- Selecionar modelo vazio
Você pode selecionar outro modelo, mas quero mostrá-lo em um projeto claro.
Instale o pacote Volo.Abp.AspNetCore.Mvc
Volo.Abp.AspNetCore.Mvc é um pacote de integração do AspNet Core MVC para ABP. Então, instale-o no seu projeto:
Install-Package Volo.Abp.AspNetCore.Mvc
Criar o primeiro módulo ABP
O ABP é uma estrutura modular e requer uma classe de módulo de inicialização (raiz) derivada de AbpModule
:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.AspNetCore.Modularity;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Modularity;
namespace BasicAspNetCoreApplication
{
[DependsOn(typeof(AbpAspNetCoreMvcModule))]
public class AppModule : AbpModule
{
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvcWithDefaultRoute();
}
}
}
AppModule
é um bom nome para o módulo de inicialização de um aplicativo.
Os pacotes ABP definem as classes do módulo e um módulo pode depender de outro módulo. No código acima, nosso AppModule
depende AbpAspNetCoreMvcModule
(definido pelo pacote Volo.Abp.AspNetCore.Mvc). É comum adicionar um DependsOn
atributo após a instalação de um novo pacote de nuget ABP.
Em vez da classe Startup, estamos configurando o pipeline do ASP.NET Core nesta classe de módulo.
A classe de inicialização
O próximo passo é modificar a classe Startup para integrar ao sistema do módulo ABP:
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
namespace BasicAspNetCoreApplication
{
public class Startup
{
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddApplication<AppModule>();
return services.BuildServiceProviderFromFactory();
}
public void Configure(IApplicationBuilder app)
{
app.InitializeApplication();
}
}
}
ConfigureServices
Método alterado para retornar em IServiceProvider
vez de void
. Essa alteração nos permite substituir a injeção de dependência do AspNet Core por outra estrutura (consulte a seção de integração com Autofac abaixo). services.AddApplication<AppModule>()
adiciona todos os serviços definidos em todos os módulos a partir do AppModule
.
app.InitializeApplication()
O Configure
método call in inicializa e inicia o aplicativo.
Olá Mundo!
O aplicativo acima não faz nada. Vamos criar um controlador MVC que faz algo:
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
namespace BasicAspNetCoreApplication.Controllers
{
public class HomeController : AbpController
{
public IActionResult Index()
{
return Content("Hello World!");
}
}
}
Se você executar o aplicativo, verá um "Olá, mundo!" mensagem na página.
Derivado HomeController
de em AbpController
vez de Controller
classe padrão . Isso não é necessário, mas a AbpController
classe possui propriedades e métodos base úteis para facilitar seu desenvolvimento.
Usando Autofac como framework de injeção de dependência
Embora o sistema de Injeção de Dependência (DI) do AspNet Core seja adequado para requisitos básicos, o Autofac fornece recursos avançados, como Injeção de Propriedade e Interceptação de Método, exigidos pela ABP para executar recursos avançados da estrutura de aplicativos.
Substituir o sistema DI do AspNet Core pelo Autofac e integrar ao ABP é bastante fácil.
- Instale o pacote Volo.Abp.Autofac
Install-Package Volo.Abp.Autofac
- Adicionar
AbpAutofacModule
dependência
[DependsOn(typeof(AbpAspNetCoreMvcModule))]
[DependsOn(typeof(AbpAutofacModule))] //Add dependency to ABP Autofac module
public class AppModule : AbpModule
{
...
}
- Altere a
services.AddApplication<AppModule>();
linha naStartup
classe, como mostrado abaixo:
services.AddApplication<AppModule>(options =>
{
options.UseAutofac(); //Integrate to Autofac
});
- Atualize
Program.cs
para não usar oWebHost.CreateDefaultBuilder()
método, pois ele usa o contêiner DI padrão:
public class Program
{
public static void Main(string[] args)
{
/*
https://github.com/aspnet/AspNetCore/issues/4206#issuecomment-445612167
CurrentDirectoryHelpers exists in: \framework\src\Volo.Abp.AspNetCore.Mvc\Microsoft\AspNetCore\InProcess\CurrentDirectoryHelpers.cs
Will remove CurrentDirectoryHelpers.cs when upgrade to ASP.NET Core 3.0.
*/
CurrentDirectoryHelpers.SetCurrentDirectory();
BuildWebHostInternal(args).Run();
}
public static IWebHost BuildWebHostInternal(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIIS()
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
}
Código fonte
Obter código-fonte do projeto de exemplo criada neste tutorial a partir de aqui .