ABP-VNEXT 學習筆記(一)基本使用


abp因為是模塊化框架,所以需要使用哪個模塊,再從nuget上引用即可。

ABP官網:https://abp.io/

一、控制台示例

 

首先創建一個控制台項目,基於net core 3.1 ,引入 Volo.Abp.Core 核心庫,abp更新很快,要注意看版本兼容。

 

 

ABP有一個啟動模塊AbpModule,我們每個項目都必須要有一個啟動模塊,也僅需一個啟動模塊, 來繼承AbpModule 。在啟動模塊中可以做一些注入

namespace HelloAbp
{
   public class HelloAbpModule:AbpModule
    {
    }
}

比如,例子中我創建了一個空的啟動模塊。

然后我們再創建一個服務類HelloWorldService,來處理我們的業務邏輯。例子中定義一個Run方法,輸出hello world。

using System;
using Volo.Abp.DependencyInjection;

namespace HelloAbp
{
    public class HelloWorldService:IScopedDependency
    {
        public void Run()
        {
            Console.WriteLine("hello world");
        } 
    }
}

這里大家會看到HelloWorldService繼承了IScopedDependency,這是ABP依賴注入的一種方式。提供了3種方式,分別對應我們依賴注入的3種方式

IScopedDependency:對應Scoped 生命周期

ITransientDependency:對應Transient生命周期,瞬時。

ISingletonDependency:對應Singleton生命周期,單例

 

只需要繼承對應的接口,即可 以對應的生命周期方式自動注入。很方便。

 

我們啟動模塊也創建了,服務也有了,那怎么連起來調用呢?

看示例:

using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;

namespace HelloAbp
{
    class Program
    {
        static void Main(string[] args)
        {
            var application = AbpApplicationFactory.Create<HelloAbpModule>(); //加載啟動模塊
            application.Initialize(); //啟動模塊初始化

            var service = application.ServiceProvider.GetService<HelloWorldService>(); //利用啟動模塊,獲取服務
            service.Run(); //執行服務定義的方法

        }
    }
}

首先,我們必須把啟動模塊初始化起來,然后利用啟動模塊,來加載服務。這樣就可以調用服務里面的方法了。看執行情況:

 

 

輸出了方法體中的內容。這樣我們就實現了控制台中簡單的使用方式。

以往,我們依賴注入大部分都是利用接口來注入的,那在這里,如果用接口,我們又如何使用呢?其實是一樣的,我直接貼代碼:

namespace HelloAbp
{
   public interface IHelloWorldService
    {
        void Run();

    }
}

定義一個接口服務類。

using Microsoft.Extensions.DependencyInjection;
using System;
using Volo.Abp.DependencyInjection;

namespace HelloAbp
{
    public class HelloWorldService:IScopedDependency,IHelloWorldService
    {
        public void Run()
        {
            Console.WriteLine("hello world");
        } 
    }
}

繼承接口。

using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;

namespace HelloAbp
{
    class Program
    {
        static void Main(string[] args)
        {
            var application = AbpApplicationFactory.Create<HelloAbpModule>(); //加載啟動模塊
            application.Initialize(); //啟動模塊初始化

            var service = application.ServiceProvider.GetService<IHelloWorldService>(); //利用啟動模塊,獲取服務
            service.Run(); //執行服務定義的方法

        }
    }
}

 在獲取服務時,采用接口類型。這樣也是得到一樣的結果。

當然對於我們開發來說,正常都是使用接口來處理,這也正是依賴注入的重要作用。

這樣,一個完整的控制台依賴注入的示例就好了。

 

 

二、那在於我們的net core MVC項目中,又要如何處理呢

首先創建一個 netcore 3.1版本的MVC項目

 

 

nuget引用以上2個包,其中core是核心庫。MVC項目必須引用MVC庫。同樣要注意版本兼容問題。

 一樣的,MVC庫也需要創建一個啟動模塊,來繼承AbpModule。

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

namespace WebApplication1.Models
{
    [DependsOn(typeof(AbpAspNetCoreMvcModule))] //必須依賴
    public class AppModule:AbpModule
    {
        /// <summary>
        /// 在啟動模塊初始化中,我們就可以把startup中的配置都搬過來
        /// </summary>
        /// <param name="context"></param>
        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            var app = context.GetApplicationBuilder();
            var env = context.GetEnvironment();
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }


            app.UseRouting();


            app.UseConfiguredEndpoints(); //使用ABP的路由總結點
        }
    }
}

創建啟動項之后,當然就是添加到配置服務里面了,以及初始化了,在startup中操作,看代碼:

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddApplication<AppModule>(); //添加啟動模塊
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.InitializeApplication(); //初始化啟動模塊
        }
    }

OK,這樣子,我們就完成了基本操作了。下面開始應用了

先創建一個IUserService接口和一個UserService服務,代碼分別如下:

namespace WebApplication1.Models
{
    public interface IUserService
    {
        string GetName();
    }
}
using Volo.Abp.DependencyInjection;

namespace WebApplication1.Models
{
    public class UserService : IUserService, IScopedDependency
    {
        public string GetName()
        {
            return "張三";
        }
    }
}

接着控制器中使用

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

namespace WebApplication1.Controllers
{
    public class HomeController : AbpController //控制器必須繼承 AbpController
    {

        private readonly IUserService _userService;
        public HomeController(IUserService userService) {
            _userService = userService;
        }

        public IActionResult Index()
        {
            return Content(_userService.GetName());
        }

    }
}

啟動項目,瀏覽

 

 

這樣,調用就成功了。我們就完成了mvc中的基本使用了。

本章結束。

 示例代碼地址:https://gitee.com/fei686868/abpvnext-learning-shili


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM