技术归档文章随笔一句话导航搜索关于

ABP 的模块加载机制

日期: 2020-11-22 分组: .NET 标签: .NETABP 2分钟 386字

安装基础包

开始

首先新建一个解决方案添加两个项目,一个控制台项目(TestAbpConsole),一个类库项目(Test)。在两个项目中都安装 Volo.Abp.Core 包。

在 Test 项目中添加 TestModule

1
using Volo.Abp.Modularity;
2
3
namespace Test
4
{
5
public class TestModule : AbpModule
6
{
7
}
8
}

添加 HelloWorldService

1
using System;
2
using Volo.Abp.DependencyInjection;
3
4
namespace Test
5
{
6
public class HelloWorldService : ITransientDependency
7
{
8
public void SayHello()
9
{
10
Console.WriteLine("Hello World!");
11
}
12
}
13
}
  • ITransientDependency 是 ABP 的一个特殊接口, 它自动将服务注册为 Transient 生命周期。

修改 TestAbpConsole 项目的 Main 方法

1
using System;
2
using TestModule;
3
using Microsoft.Extensions.DependencyInjection;
4
using Volo.Abp;
5
6
namespace AbpModule
7
{
8
class Program
9
{
10
static void Main(string[] args)
11
{
12
using var application = AbpApplicationFactory.Create<TestModule>();
13
application.Initialize();
14
var helloWorldService = application.ServiceProvider.GetService<HelloWorldService>();
15
helloWorldService.SayHello();
5 collapsed lines
16
17
Console.ReadLine();
18
}
19
}
20
}

输出

1
Hello World

在 Web 项目中使用

使用 abp 命令新建一个 Web 项目

1
abp new Test

如果通过命令因为网络不好使请在这个网站创建项目。

新建一个模块项目

新建一个名为 Test 的类库项目,首先通过 NuGet 工具安装 Volo.Abp.AspNetCore.Mvc 包,新建 TestModule

1
using Microsoft.AspNetCore.Builder;
2
using Volo.Abp.Modularity;
3
4
namespace Test
5
{
6
public class TestModule : AbpModule
7
{
8
public override void ConfigureServices(ServiceConfigurationContext context)
9
{
10
}
11
12
public void Configure(IApplicationBuilder app)
13
{
14
app.UseEndpoints(endpoints =>
15
{
5 collapsed lines
16
endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
17
});
18
}
19
}
20
}

然后添加一个 HomeController 控制器

1
using Microsoft.AspNetCore.Mvc;
2
using Volo.Abp.AspNetCore.Mvc;
3
4
namespace Test.Controller
5
{
6
public class HomeController : AbpController
7
{
8
public IActionResult Index()
9
{
10
return Json("Hello World");
11
}
12
}
13
}

设置 Test.Web 项目为启动项,添加 Test 引用到此项目中, 在 TestWebModule 中添加模块

1
[DependsOn(
2
...,
3
typeof(TestModule)
4
)]
5
public class TestWebModule : AbpModule
6
{
7
...

先运行 Test.DbMigrator 完成数据库的迁移,然后启动 Test.Web 项目查看 /Home/Index 页面,可看到输出Hello World

人应当是有理想的.
文章目录