【ABP框架系列學習】模塊系統(4)之插件示例開發

0.引言

上一篇博文主要介紹了ABP模塊及插件的相關知識,本章節主要開發一個插件示例來學習如何建立一個插件,並在應用程序中使用。這個命名爲FirstABPPlugin的插件主要在指定的時間段內刪除審計日誌。app

1.建立插件

(1).新建項目,選擇【類庫(.NET Core)】ide


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


(3).建立FirstABPPluginModule類,繼承AbpModule類和聲明依賴於AbpZeroCoreModulespa

    [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).最終結構以下3d


(6).生成項目,在bin/Debug/netcoreapp2.1目錄下生成FirstABPPlugin.dll日誌


2.添加插件到應用程序

(1).啓動ABP項目模版生成的程序,把剛生成的FirstABPPlugin.dll拷貝到wwwroot/Plugins目錄下code


(2).在Mvc項目的Startup.cs類中,添加以下代碼:blog

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日誌記錄繼承

相關文章
相關標籤/搜索