采用abp框架进行maui开发,启动页面时如何新增后台服务

采用ABP框架进行.NET MAUI开发,利用ABP框架强大功能,如IoC容器、配置管理、工作单元特性、模块化特性等,来构建您的跨平台应用程序。新增后台服务有二个方式,一种是新增一个类工作,在这类里可建设多个线程,不间断的运行,或是设置定时运行。另一种方式是建一个后台服务工作者,可对这个服务提供接口服务,提供HTTP接口给别人访问。

一、类工作

在原已注入的ABP框加上,增加对调用新建的类。

1)新增一个接口名为IBackgroundService,记得要引用ISingletonDependency,用于ABP相关注入。

 public interface IBackgroundService: ISingletonDependency
    {
        Task StartAsync();
        Task StopAsync();
    }

2)新增一个类名为BackgroundService,并引用IBackgroundService接口,这时候BackgroundService(IIocResolver iocResolver)构造函数可带参数,主要继承接口里ISingletonDependency的原因。

    public class BackgroundService : IBackgroundService
    {
        private readonly IRepository<Rules.Models.Entities.Device, long> _repository;
        private readonly IIocResolver _iocResolver;

        private readonly RopeSkipDbContext _dbContext;
        public BackgroundService(IIocResolver iocResolver, IRepository<Rules.Models.Entities.Device, long> repository)
        {
            //_repository = repository;
            //var context = new RopeSkipDbContext(new DbContextOptionsBuilder<RopeSkipDbContext>()
            //.UseSqlite(dbConnectionString).Options);
            this._iocResolver = iocResolver;
            this._repository = repository;

        }
        //public BackgroundService(RopeSkipDbContext dbContext)
        //{
        //    this._dbContext = dbContext;
        //}        
        public async Task StartAsync()
        {
            //var deviceInfo = await _repository.GetAllListAsync(t => t.IsDeleted == false);
            // 后台服务启动逻辑
            await Task.Run(async () =>
            {
                int i = 0;
                return;
            });
            
            return;
        }

        public Task StopAsync()
        {
            // 后台服务停止逻辑
            return Task.CompletedTask;
        }
    }

3)这样类就创建完成了,现在系统启动配置App.xaml.cs的类里,调用启动类的引用。

_backgroundService= _abpBootstrapper.IocManager.Resolve<IBackgroundService>();

_backgroundService.StartAsync();

完整代码如下:

private readonly AbpBootstrapper _abpBootstrapper;
        private readonly IBackgroundService _backgroundService;
        
        public App(AbpBootstrapper abpBootstrapper)
        {
            _abpBootstrapper = abpBootstrapper;
            InitializeComponent();
            _abpBootstrapper.Initialize();

            //运行后台服务
            _backgroundService= _abpBootstrapper.IocManager.Resolve<IBackgroundService>();
            _backgroundService.StartAsync();
            //设置广告页为初始页面
            if (_abpBootstrapper != null && _abpBootstrapper.IocManager != null)
            {
                this.MainPage = _abpBootstrapper.IocManager.Resolve(typeof(AppShell)) as AppShell;
            }

        }

二、启用后台服务工作者

在ABP框架中进行.NET MAUI开发,并在启动页面时启用后台服务,可以按照以下步骤进行:

  1. 定义后台服务 : 创建一个后台服务类,继承自BackgroundWorkerBaseAsyncPeriodicBackgroundWorkerBase,并实现具体的后台任务逻辑。例如:

    public class MyBackgroundService : AsyncPeriodicBackgroundWorkerBase, ISingletonDependency
    {
        protected override async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            // 后台任务逻辑
            while (!cancellationToken.IsCancellationRequested)
            {
                // 执行任务
                await Task.Delay(TimeSpan.FromMinutes(1), cancellationToken);
            }
        }
    }
    
  2. 注册后台服务 : 在你的ABP模块中,依赖于AbpBackgroundWorkersModule,并在OnApplicationInitializationAsync方法中添加你的后台服务。例如:

    [DependsOn(typeof(AbpBackgroundWorkersModule))]
    public class MyModule : AbpModule
    {
        public override async Task OnApplicationInitialization(ApplicationInitializationContext context)
        {
            await context.AddBackgroundWorkerAsync<MyBackgroundService>();
        }
    }
    
  3. 配置MAUI应用 : 在MAUI应用的MauiProgram.cs中,配置ABP框架并启动后台服务。例如:

    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                });
    
            // 初始化ABP框架和后台服务
            builder.UseMauiBoilerplate<MyModule>();
    
            return builder.Build();
        }
    }
    

    在这里,UseMauiBoilerplate<TStartupModule>是一个扩展方法,用于初始化ABP框架和注册后台服务。你需要根据你的项目实际情况来实现这个方法,确保ABP框架和后台服务被正确初始化。

  4. 启动后台服务 : 当MAUI应用启动时,MauiProgram.cs中的代码将执行,ABP框架将被初始化,后台服务也将随之启动。

相关推荐
林晓lx4 个月前
[MAUI 项目实战] 笔记App(二):数据库设计
数据库·maui·xamarin
林晓lx4 个月前
[MAUI 项目实战] 笔记App:程序设计
app·maui·xamarin·.net blazor
李建军5 个月前
.NET MAUI Sqlite数据库操作(一)
maui
李建军5 个月前
.NET MAUI Sqlite数据库操作(二)异步初始化方法
sqlite·maui
hoyho6 个月前
分享下最近基于Avalonia UI和MAUI写跨平台时间管理工具的体验
.net·maui·avalonia
时光追逐者7 个月前
.NET MAUI使用Visual Studio Android Emulator(安卓模拟器)运行
android·c#·.net·.net core·maui
MicrosoftReactor7 个月前
技术速递|为 .NET iOS 和 .NET MAUI 应用程序添加 Apple 隐私清单支持
ios·.net·maui