入門系列-在AspNet Core MVC Web Application中使用ABP

本教程將介紹如何開始以最少的依賴關係開始使用ABP開發.

通常情況下你需要下載一個 啓動模板

創建一個新項目

  1. 使用Visual Studio創建一個空的AspNet Core Web Application:
  2. 選擇空模板

你可以選擇其它模板,但是我想要從一個簡潔的項目演示它。

安裝 Volo.Abp.AspNetCore.Mvc 包

Volo.Abp.AspNetCore.Mvc是ABP集成AspNet Core MVC的包,請安裝它到你項目中:

Install-Package Volo.Abp.AspNetCore.Mvc

創建ABP模塊

ABP是一個模塊化框架,它需要一個啓動 (根) 模塊繼承自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 是應用程序啓動模塊的好名稱(建議你的啓動模塊也使用這個命名).

ABP的包定義了這個模塊類,模塊可以依賴其它模塊.在上面的代碼中 AppModule 依賴於 AbpAspNetCoreMvcModule (模塊存在於Volo.Abp.AspNetCore.Mvc包中). 安裝新的ABP的包後添加DependsOn是很常見的做法.

我們在此模塊類中配置ASP.NET Core管道,而不是Startup類中。

啓動類

接下來修改啓動類集成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 方法的返回值爲 IServiceProvider (默認是void).這個修改允許我們替換 AspNet Core 的依賴注入框架. (參閱下面的Autofac集成部分). services.AddApplication<AppModule>()添加了所有模塊中定義的全部服務.

app.InitializeApplication() 調用 Configure 方法初始化並啓動應用程序

Hello World!

上面的應用程序沒有什麼功能,讓我們創建一個MVC控制器實現一些功能:

using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;

namespace BasicAspNetCoreApplication.Controllers
{
    public class HomeController : AbpController
    {
        public IActionResult Index()
        {
            return Content("Hello World!");
        }
    }
}

如果運行這個應用程序你會在頁面中看到"Hello World!".

Derived HomeController from AbpController instead of standard Controller class. This is not required, but AbpController class has useful base properties and methods to make your development easier.

AbpController派生HomeController 而不是繼承自Controller類.雖然這不是強制要求,但是AbpController類有很多有用的有屬性和方法,使你的開發更容易。

使用 Autofac 依賴注入框架

雖然AspNet Core的依賴注入(DI)系統適用於基本要求,但Autofac提供了屬性注入和方法攔截等高級功能,這些功能是ABP執行高級應用程序框架功能所必需的.

用Autofac取代AspNet Core的DI系統並集成到ABP非常簡單.

  1. 安裝 Volo.Abp.Autofac 包
    Install-Package Volo.Abp.Autofac
  2. 添加 AbpAutofacModule 依賴
    [DependsOn(typeof(AbpAspNetCoreMvcModule))]
    [DependsOn(typeof(AbpAutofacModule))] // 在模塊上添加依賴AbpAutofacModule
    public class AppModule : AbpModule
    {
        ...
    }
    

     

  3. 修改在Startup類下的services.AddApplication<AppModule>();如下所示:
    services.AddApplication<AppModule>(options =>
    {
        options.UseAutofac(); // 集成 Autofac
    });
    

     

  4. 更新 Program.cs代碼, 不再使用WebHost.CreateDefaultBuilder()方法(因爲它使用默認的DI容器):
    public class Program
    {
       public static void Main(string[] args)
       {
           /*
               https://github.com/aspnet/AspNetCore/issues/4206#issuecomment-445612167
               CurrentDirectoryHelpers 文件位於: \framework\src\Volo.Abp.AspNetCore.Mvc\Microsoft\AspNetCore\InProcess\CurrentDirectoryHelpers.cs
               當升級到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();
    }
    
     

     

發佈了84 篇原創文章 · 獲贊 63 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章