zoukankan      html  css  js  c++  java
  • 【ABP框架系列学习】模块系统(4)之插件示例开发

    0.引言

    上一篇博文主要介绍了ABP模块及插件的相关知识,本章节主要开发一个插件示例来学习如何创建一个插件,并在应用程序中使用。这个命名为FirstABPPlugin的插件主要在指定的时间段内删除审计日志。

    1.创建插件

    (1).新建项目,选择【类库(.NET Core)】


    (2).添加引用Abp、Abp.ZeroCore


    (3).创建FirstABPPluginModule类,继承AbpModule类和声明依赖于AbpZeroCoreModule

        [DependsOn(typeof(AbpZeroCoreModule))]
        public class FirstABPPluginModule:AbpModule
        {
            public override void Initialize()
            {
                IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
            }
    
            public override void PostInitialize()
            {
                var workManager = IocManager.Resolve<IBackgroundWorkerManager>();
                workManager.Add(IocManager.Resolve(DeleteOldAuditLogsWorker());
            }
        }

    (4).添加DeleteOldAuditLogsWorker类

     public class DeleteOldAuditLogsWorker : PeriodicBackgroundWorkerBase, ISingletonDependency
        {
            private readonly IRepository<AuditLog, long> _auditLogRepository;
    
            public DeleteOldAuditLogsWorker(AbpTimer timer,IRepository<AuditLog,long> auditLogRepository) : base(timer)
            {
                _auditLogRepository = auditLogRepository;
    
                Timer.Period = 5000;
            }
    
            [UnitOfWork]
            protected override void DoWork()
            {
                Logger.Info("---------------- DeleteOldAuditLogsWorker 正在工作 ----------------");
    
                using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant))
                {
                    var fiveMinutesAgo = Clock.Now.Subtract(TimeSpan.FromMinutes(5));
    
                    _auditLogRepository.Delete(log => log.ExecutionTime > fiveMinutesAgo);
    
                    CurrentUnitOfWork.SaveChanges();
                }
            }
        }

    (5).最终结构如下


    (6).生成项目,在bin/Debug/netcoreapp2.1目录下生成FirstABPPlugin.dll


    2.添加插件到应用程序

    (1).启动ABP项目模版生成的程序,把刚生成的FirstABPPlugin.dll拷贝到wwwroot/Plugins目录下


    (2).在Mvc项目的Startup.cs类中,添加如下代码:

    public class Startup
    {
        private readonly IConfigurationRoot _appConfiguration;
    
        public Startup(IHostingEnvironment env)
        {
            _appConfiguration = env.GetAppConfiguration();
        }
    
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            ...
    
            // Configure Abp and Dependency Injection
            return services.AddAbp<AbpProjectNameWebMvcModule>(
                // Configure Log4Net logging
                options => options.IocManager.IocContainer.AddFacility<LoggingFacility>(
                    f => f.UseAbpLog4Net().WithConfig("log4net.config")
                );
    
                options.PlugInSources.AddFolder(Path.Combine(_hostingEnvironment.WebRootPath, "Plugins"), SearchOption.AllDirectories);
            );
        }
    
        ...
    }

    (3)运行程序,查看Logs.txt日志记录


  • 相关阅读:
    sql语言复习:学院-学生-教师-课程-学习-授课表上的一些操作
    JZOJ6358. 【NOIP2019模拟2019.9.15】小ω的仙人掌
    JZOJ6353. 【NOIP2019模拟】给(ca)
    【CSP-S2019模拟】09.13比赛总结
    【CSP-S2019模拟】09.11比赛总结
    JZOJ6341. 【NOIP2019模拟2019.9.4】C
    JZOJ6344. 【NOIP2019模拟2019.9.7】Huge Counting
    JZOJ6343. 【NOIP2019模拟2019.9.7】Medium Counting
    【随机编号】【 2019 Multi-University Training Contest 8】1008.Andy and Maze
    【吉如一线段树】JZOJ6270. 【省赛模拟8.10】序列
  • 原文地址:https://www.cnblogs.com/OlderGiser/p/10015246.html
Copyright © 2011-2022 走看看