欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

搭建基礎結構的ABP解決方案介紹

 更新時間:2022年02月23日 10:27:10   作者:癡者工良  
這篇文章介紹了搭建基礎結構的ABP解決方案的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

搭建項目基礎結構

打開 VS 2019,創(chuàng)建一個解決方案,然后刪除解決方案的項目,變成空解決方案。本系列教程將使用 AbpBase 來命名解決方案和項目前綴。

在解決方案中新建一個解決方案文件夾,名字為 src,用來存放項目源碼。

我們將要創(chuàng)建一個類似下圖這樣的層次結構的解決方案,只是沒有 HttpApi.Client ,另外.EntityFrameCore 改成了 .Database。

下面我們來創(chuàng)建需要的項目結構,和了解每一個項目的作用。

AbpBase.Domain.Shared

此項目是最底層的模塊,且不依賴其他模塊,主要用于定義各種枚舉(enums)、全局常量(constants)、靜態(tài)變量(static)、啟動依賴配置(options)等。還可以在此為程序設置一個標準,限制各個層次的模塊都必須符合此標準的要求。

例如 規(guī)定API 請求的一般參數(shù),字符串長度不得大于 256 個字符,我們可以這樣寫:

public static Whole
{
	public const int MaxLength = 256;
}

[StringLength(maximumLength:Whole.MaxLength)]

總之,這個模塊用于定義各種全局的、共享的內(nèi)容(變量、枚舉等),一般不包含服務。

創(chuàng)建過程

在解決方案中新建 .NET Standard 項目,名稱為 AbpBase.Domain.Shared,然后通過 Nuget 添加 Volo.Abp.Core 包,版本為 3.1.2。

然后新建 一個 AbpBaseDomainSharedModule.cs 文件,其內(nèi)容如下:

using System;
using Volo.Abp.Modularity;

namespace AbpBase.Domain.Shared
{
    [DependsOn()]
    public class AbpBaseDomainSharedModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
        }
    }
}

在 ABP 項目中,每一個模塊(項目) 都要創(chuàng)建一個繼承 AbpModule 的 類,用于聲明此模塊的結構、依賴注入等。

[DependsOn] 是依賴注入標記,代表要為模塊注入什么服務,因為 .Domain.Shared 不依賴任何模塊,因此現(xiàn)在先留空,寫成 [DependsOn()] 。

AbpBase.Domain

此項目用于定義各種用于傳遞數(shù)據(jù)的類。例如數(shù)據(jù)庫實體、用于做參數(shù)傳遞的模型類等。

創(chuàng)建過程

我們在解決方案的src 文件夾,添加一個新的項目,名字為 AbpBase.Domain,然后引用 AbpBase.Domain.Shared 項目。

在項目中創(chuàng)建一個 AbpBaseDomainModule.cs 文件,其內(nèi)容如下:

using AbpBase.Domain.Shared;
using Volo.Abp.Modularity;

namespace AbpBase.Domain
{
    [DependsOn(
        typeof(AbpBaseDomainSharedModule)
        )]
    public class AbpBaseDomainModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
        }
    }
}

AbpBase.Domain 依賴于 AbpBase.Domain.Shared 。

AbpBase.Application.Contracts

主要用于定義接口、抽象和 DTO 對象。這個模塊用于定義各種服務,但是不提供實現(xiàn)。

創(chuàng)建過程

在解決方案的 src 文件夾,新建一個 AbpBase.Application.Contracts 項目,然后添加 AbpBase.Domain 項目引用。

在項目里新建一個 AbpBaseApplicationContractsModule 文件,其內(nèi)容如下:

using AbpBase.Domain;
using Volo.Abp.Modularity;

namespace AbpBase.Application.Contracts
{
    [DependsOn(
       typeof(AbpBaseDomainModule)
   )]
    public class AbpBaseApplicationContractsModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
        }
    }
}

AbpBase.Database

此模塊用于配置和定義 EFCore、Freesql 等 ORM,還有倉儲等,主要是處理數(shù)據(jù)庫相關的代碼。

創(chuàng)建過程

在解決方案 的 src 目錄新建一個 AbpBase.Database 項目,然后添加 AbpBase.Domain 項目引用。

在項目中新建一個 AbpBaseDatabaseModule 文件,其內(nèi)容如下:

using AbpBase.Domain;
using Volo.Abp.Modularity;

namespace AbpBase.Database
{
    [DependsOn(
  	 typeof(AbpBaseDomainModule)
    )]
    public class AbpBaseDatabaseModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {

        }
    }
}

ABP 里面默認集成了 EFCore ,所以我們可以直接拿來使用,這里我們先不處理數(shù)據(jù)庫相關的東西,但是先提前配好依賴注入。

在 Nuget 管理器中,添加下面四個包,版本都是 3.1.2 :

Volo.Abp.EntityFrameworkCore
Volo.Abp.EntityFrameworkCore.MySQL
Volo.Abp.EntityFrameworkCore.Sqlite
Volo.Abp.EntityFrameworkCore.SqlServer

然后將 AbpBaseDatabaseModule.cs 文件的內(nèi)容修改成如下內(nèi)容:

using AbpBase.Domain;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.MySQL;
using Volo.Abp.EntityFrameworkCore.Sqlite;
using Volo.Abp.EntityFrameworkCore.SqlServer;
using Volo.Abp.Modularity;

namespace AbpBase.Database
{
    [DependsOn(
        typeof(AbpBaseDomainModule),
        typeof(AbpEntityFrameworkCoreModule),
        typeof(AbpEntityFrameworkCoreSqliteModule),
        typeof(AbpEntityFrameworkCoreSqlServerModule),
        typeof(AbpEntityFrameworkCoreMySQLModule)
        )]
    public class AbpBaseDatabaseModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
        }
    }
}

這樣,我們的項目將可以支持三種數(shù)據(jù)庫的使用。

AbpBase.Application

此用于實現(xiàn)接口、編寫各種服務。

創(chuàng)建過程

在解決方案的 src 文件夾,新建一個 AbpBase.Application 項目,然后添加 AbpBase.Application.Contracts 、 AbpBase.Database 項目引用。

在項目里創(chuàng)建一個 AbpBaseApplicationModule.cs 文件,其文件內(nèi)容如下:

using AbpBase.Application.Contracts;
using AbpBase.Database;
using AbpBase.Domain;
using Volo.Abp.Modularity;

namespace AbpBase.Application
{
    [DependsOn(
        typeof(AbpBaseDomainModule),
        typeof(AbpBaseApplicationContractsModule),
        typeof(AbpBaseDatabaseModule)
    )]
    public class AbpBaseApplicationModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
        }
    }
}

AbpBase.HttpApi

此項目用于編寫 API 控制器。

創(chuàng)建過程

創(chuàng)建 一個 .NET Core 控制臺項目,名字為 AbpBase.HttpApi,通過 Nuget 添加 Volo.Abp.AspNetCore.Mvc 包,版本為 3.1.2。

然后添加 AbpBase.Application.Contracts 和 AbpBase.Application 兩個項目引用。

在項目里面創(chuàng)建一個 AbpBaseHttpApiModule.cs 文件,其內(nèi)容如下:

using AbpBase.Application;
using AbpBase.Application.Contracts;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Modularity;

namespace AbpBase.HttpApi
{
    [DependsOn(
        typeof(AbpAspNetCoreMvcModule),
        typeof(AbpBaseApplicationModule),
        typeof(AbpBaseApplicationContractsModule)
        )]
    public class AbpBaseHttpApiModule : AbpModule
    {

        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            Configure<AbpAspNetCoreMvcOptions>(options =>
            {
                options
                    .ConventionalControllers
                    .Create(typeof(AbpBaseHttpApiModule).Assembly, opts =>
                    {
                        opts.RootPath = "api/1.0";
                    });
            });
        }
    }
}

上面,模塊的 ConfigureServices 函數(shù)里面,創(chuàng)建了 API 服務。

AbpBase.Web

此模塊是最上層的模塊,用于提供 UI 與用戶交互、權限控制、提供啟動配置信息、控制程序運行等。

創(chuàng)建過程

在解決方案的 src 文件夾,新建一個 AbpBase.Web 項目,項目為 ASP.NET Core 程序,并且創(chuàng)建模板為“空”。

通過 Nuget 管理器添加 Volo.Abp.Autofac,版本為 3.1.2,然后添加 AbpBase.Application 和 AbpBase.HttpApi 項目引用。

在項目里面創(chuàng)建 AbpBaseWebModule.cs 文件,其內(nèi)容如下:

using AbpBase.Application;
using AbpBase.HttpApi;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Modularity;

namespace AbpBase.Web
{
    [DependsOn(
        typeof(AbpBaseApplicationModule),
        typeof(AbpAspNetCoreMvcModule),
        typeof(AbpBaseHttpApiModule)
        )]
    public class AbpBaseWebModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {

        }

        public override void OnApplicationInitialization(
            ApplicationInitializationContext context)
        {
            var app = context.GetApplicationBuilder();
            var env = context.GetEnvironment();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }

            app.UseStaticFiles();
            app.UseRouting();
            app.UseConfiguredEndpoints();
        }
    }
}

在 Program.cs文件中 ,加上 .UseAutofac()

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseAutofac();

將 Startup.cs 的內(nèi)容 改為:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

namespace AbpBase.Web
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddApplication<AbpBaseWebModule>();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.InitializeApplication();
        }
    }
}

完成上面的步驟后,你將得到一個可以啟動的、具有基礎結構的 ABP(WEB) 應用,你可以添加一個 API 來進行測試訪問。

在 AbpBase.HttpApi 項目中,創(chuàng)建一個 COntrollers 目錄,再添加一個 API 控制器,其內(nèi)容如下:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc;

namespace AbpBase.Web.Controllers
{
    [ApiController]
    public class TestController : AbpController
    {
        [HttpGet("/T")]
        public string MyWebApi()
        {
            return "應用啟動成功!";
        }
    }
}

然后啟動程序,訪問 https://localhost:5001/T,可以發(fā)現(xiàn)頁面顯示了字符串,則測試成功。

當然,這只是一個非常簡單的結構,我們還需要添加項目跨域、授權驗證、依賴注入、swagger 、數(shù)據(jù)庫訪問等一系列的服務,后面我們將通過從易到難、逐步求精的方法來學習 ABP 框架和架設一個完整的實踐項目!

下面介紹一下上面模塊中出現(xiàn)的一些代碼結構。

關于ABP和代碼解疑

完成上面的步驟后,相信你應該對 ABP 項目有了大致的認識,下面我們來介紹一下 ABP 中的一些概念以及前面出現(xiàn)到的一些代碼解析。

模塊

我們看一下 ABP 官網(wǎng)中關于 ABP 的介紹:

ABP 框架提供的設計旨在支持構建完全模塊化的應用程序和系統(tǒng)

前面我們建立了 7 個項目,相信大家已經(jīng)體驗到了模塊化開發(fā)的過程。

ABP 模塊化,就是將每個項目作為一個模塊,然后每個模塊中需要定義一個繼承 AbpModule 的類,最終集成到上層模塊中。

[DependsOn]

一個模塊要使用另一個模塊時,通過 [DependsOn] 特性來引用需要的模塊。

配置服務和管道

繼承 AbpModule 的類型,可以使用 ConfigureServices 來配置服務,如依賴注入、數(shù)據(jù)庫配置、跨域等,OnApplicationInitialization 則用來配置中間件管道。

當然,這兩個函數(shù)都可以不寫,直接寫個空的 Module

    [DependsOn(
        typeof(AbpBaseDomainSharedModule)
        )]
    public class AbpBaseDomainModule : AbpModule
    {
    }

模塊如何關聯(lián)

首先,每個模塊都需要定義一個類來繼承 AbpModule ,然后一個模塊要使用另一個模塊,則通過 [DependsOn] 來聲明引用。

在本教程的解決方案結構中, AbpBase.Web 是最上層的項目,他依賴了三個模塊:

    [DependsOn(
        typeof(AbpBaseApplicationModule),
        typeof(AbpBaseHttpApiModule),
        typeof(AbpAspNetCoreMvcModule)
        )]

而 AbpBaseApplicationModule 模塊又使用了其他模塊,這就形成了一個引用鏈,讀者可以看看文章開頭的圖片。

引用鏈形成后,程序啟動時,會順著這個鏈,從最底層的模塊開始初始化。這個初始化鏈會依次調(diào)用模塊的 ConfigureServices 函數(shù),為程序逐漸配置服務。

Domain.Shared -> Domain -> Application.Contras -> ....

你可以在每個 Module 的 ConfigureServices 函數(shù)中打印控制臺信息,然后啟動程序進行測試,看看打印順序。

源碼地址:https://github.com/whuanle/AbpBaseStruct

本教程結果代碼位置:https://github.com/whuanle/AbpBaseStruct/tree/master/src/1/AbpBase

到此這篇關于搭建基礎結構的ABP解決方案的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Asp.Net上傳文件并配置可上傳大文件的方法

    Asp.Net上傳文件并配置可上傳大文件的方法

    這篇文章介紹了Asp.Net上傳文件并配置可上傳大文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 詳解ABP框架中的數(shù)據(jù)過濾器與數(shù)據(jù)傳輸對象的使用

    詳解ABP框架中的數(shù)據(jù)過濾器與數(shù)據(jù)傳輸對象的使用

    ABP框架是一個基于ASP.NET的Web開發(fā)框架,這里我們來詳解ABP框架中的數(shù)據(jù)過濾器與數(shù)據(jù)傳輸對象的使用,需要的朋友可以參考下
    2016-06-06
  • Blazor數(shù)據(jù)綁定用法

    Blazor數(shù)據(jù)綁定用法

    這篇文章介紹了Blazor數(shù)據(jù)綁定的用法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • .Net行為型設計模式之訪問者模式(Visitor)

    .Net行為型設計模式之訪問者模式(Visitor)

    這篇文章介紹了.Net行為型設計模式之訪問者模式(Visitor),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • .net?core中的System.Buffers命名空間

    .net?core中的System.Buffers命名空間

    這篇文章介紹了.net?core中的System.Buffers命名空間,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • .Net行為型設計模式之迭代器模式(Iterator)

    .Net行為型設計模式之迭代器模式(Iterator)

    這篇文章介紹了.Net行為型設計模式之迭代器模式(Iterator),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • asp.net Webconfig中的一些配置

    asp.net Webconfig中的一些配置

    除了手動編輯此文件以外,您還可以使用Web 管理工具來配置應用程序的設置??梢允褂?Visual Studio 中的“網(wǎng)站”->“Asp.Net 配置”選項。
    2010-07-07
  • Entity Framework Core工具使用命令行

    Entity Framework Core工具使用命令行

    這篇文章介紹了Entity Framework Core工具使用命令行,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • .Net行為型設計模式之狀態(tài)模式(State)

    .Net行為型設計模式之狀態(tài)模式(State)

    這篇文章介紹了.Net行為型設計模式之狀態(tài)模式(State),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • .NET正則表達式的最佳用法

    .NET正則表達式的最佳用法

    本文詳細講解了.NET正則表達式最佳用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論