在控制台应用中使用ABP

本教程将介绍如何从头开始以最小的依赖关系启动ABP. 你通常希望以 启动模板 开头.

创建一个新项目

使用Visual Studio创建一个新的.Net Core Console应用程序:

使用Console Application - 图1

安装 Volo.Abp 包

Volo.Abp.Core是创建基于ABP的应用程序的核心nuget包. 所以,将它安装到你的项目中:

  1. Install-Package Volo.Abp.Core

创建第一个ABP模块

ABP是一个模块化框架, 它需要一个从AbpModule类派生的 启动(根)模块 类:

  1. using Microsoft.Extensions.DependencyInjection;
  2. using Volo.Abp.Modularity;
  3. namespace AbpConsoleDemo
  4. {
  5. public class AppModule : AbpModule
  6. {
  7. }
  8. }

AppModule 是应用程序启动模块的好名称.

初始化应用程序

下一步是使用上面创建的启动模块引导应用程序:

  1. using System;
  2. using Volo.Abp;
  3. namespace AbpConsoleDemo
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. using (var application = AbpApplicationFactory.Create<AppModule>())
  10. {
  11. application.Initialize();
  12. Console.WriteLine("Press ENTER to stop application...");
  13. Console.ReadLine();
  14. }
  15. }
  16. }
  17. }

AbpApplicationFactory 用于创建应用程序并加载所有以AppModule作为启动模块的模块. Initialize()方法启动应用程序.

Hello World!

上面的应用程序什么都不做, 让我们创建一个服务做一些事情:

  1. using System;
  2. using Volo.Abp.DependencyInjection;
  3. namespace AbpConsoleDemo
  4. {
  5. public class HelloWorldService : ITransientDependency
  6. {
  7. public void SayHello()
  8. {
  9. Console.WriteLine("Hello World!");
  10. }
  11. }
  12. }

ITransientDependency是ABP的一个特殊接口, 它自动将服务注册为Transient(参见依赖注入文档).

现在,我们可以解析HelloWorldService并调用SayHello. 更改Program.cs, 如下所示:

  1. using System;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using Volo.Abp;
  4. namespace AbpConsoleDemo
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. using (var application = AbpApplicationFactory.Create<AppModule>())
  11. {
  12. application.Initialize();
  13. // 解析服务并使用它
  14. var helloWorldService =
  15. application.ServiceProvider.GetService<HelloWorldService>();
  16. helloWorldService.SayHello();
  17. Console.WriteLine("Press ENTER to stop application...");
  18. Console.ReadLine();
  19. }
  20. }
  21. }
  22. }

这对于这个简单的代码示例已足够, 如果是直接从IServiceProvider解析建议创建Scoped依赖.(参见依赖注入文档).

源码

这里获取本教程中创建的示例项目的源代码.