首页 > 其他分享 >Abp自定义模块种子数据

Abp自定义模块种子数据

时间:2023-04-04 21:22:43浏览次数:39  
标签:自定义 serviceProvider SeedAsync options Abp 模块 public

模块的初始化或者系统的基本运行需要一些基础数据,可以利用ABP提供的种子数据基础上设置进行数据播种。

自定义模块

自定义模块可以定义自己的 DataSeeder, 例如数据字典 :

public interface IDataDictionaryDataSeeder {

   Task SeedAsync(string name, string value);
}

定义接口实现

public class DataDictionaryDataSeeder : IDataDictionaryDataSeeder, ITransientDependency
{
   public Task SeedAsync(string name, string value){}
}

定义好模块的种子数据后, 后续的处理有另种方案,但最终都是利用ABP基础设施中的 IDataSeedContributor
如果是一个大模块的技术数据播种, 可以参考ABP的 IDataSeedContributor, 自定义数据的贡献者, 自定义贡献者中注入自定义的模块功能 IDataDictionaryDataSeeder

  public interface INavigationSeedContributor
    {
        Task SeedAsync(NavigationSeedContext context);
    }

将自定义的贡献者注册到模块功能Options中

 public class AbpNavigationOptions
    {
        public ITypeList<INavigationDefinitionProvider> DefinitionProviders { get; }

        public ITypeList<INavigationSeedContributor> NavigationSeedContributors { get; }

        public AbpNavigationOptions()
        {
            DefinitionProviders = new TypeList<INavigationDefinitionProvider>();
            NavigationSeedContributors = new TypeList<INavigationSeedContributor>();
        }
    }

最终实现

  public class NavigationDataSeedContributor : IDataSeedContributor, ITransientDependency
    {
        private readonly IServiceProvider _serviceProvider;
        private readonly AbpNavigationOptions _options;
        public List<INavigationSeedContributor> Contributors => _lazyContributors.Value;
        private readonly Lazy<List<INavigationSeedContributor>> _lazyContributors;

        public NavigationDataSeedContributor(
            IServiceProvider serviceProvider,
            IOptions<AbpNavigationOptions> options)
        {
            _serviceProvider = serviceProvider;
            _options = options.Value;
            _lazyContributors = new Lazy<List<INavigationSeedContributor>>(CreateContributors);
        }

        public async virtual Task SeedAsync(DataSeedContext context)
        {            
            var seedContext = new NavigationSeedContext(menus, multiTenancySides);

            foreach (var contributor in Contributors)
            {
                await contributor.SeedAsync(seedContext);
            }
        }

        private List<INavigationSeedContributor> CreateContributors()
        {
            return _options
                .NavigationSeedContributors
                .Select(type => _serviceProvider.GetRequiredService(type) as INavigationSeedContributor)
                .ToList();
        }
    }

标签:自定义,serviceProvider,SeedAsync,options,Abp,模块,public
From: https://www.cnblogs.com/SSprite/p/17287949.html

相关文章

  • 解决Abp设置DefaultLanguage默认语言不生效的问题
    @目录现象原因分析解决问题现象默认地,Abp的语言提供程序将返回的CultureInfo为En,在一些默认实现的接口(比如/api/TokenAuth/Authenticate)返回的错误信息是英文目标是改成简体中文显示,但是即便我们在AbpSettings表中加入了DefaultLanguage为"zh-Hans"AddSettingIfNotExists(L......
  • Js/Jquery获取自定义属性的方法
    html:<spanid="item"data-test='test'></span>方法一、原生JS的getAttribute获取自定义属性设置属性.setAttribute("属性","值")获取属性.getAttribute("属性")varspan=document.getElementById('item').ge......
  • ABP 新建项目
    1.新建项目  1.1安装abpclidotnettoolinstall-gVolo.Abp.Cli1.2创建项目前往https://abp.io/get-started 下载项目,笔者选定项目为blazor-server+postgreSqlabpnewProjectName-ublazor-server-dbmsPostgreSQL   2.迁移数据库2.1修改连接......
  • Revit附加模块Add-in Manager里一次性加载所有.dll文件
    publicResultExecute(ExternalCommandDatacommandData,refstringmessage,ElementSetelements){GlobalRevitData.commandData=commandData;AppDomain.CurrentDomain.AssemblyResolve+=CurrentDomain_AssemblyResolve;//在Execute方法体内添加这行......
  • Android 手把手教您自定义ViewGroup(一)
    本文出自:【张鸿洋的博客】最近由于工作的变动,导致的博客的更新计划有点被打乱,希望可以尽快脉动回来~今天给大家带来一篇自定义ViewGroup的教程,说白了,就是教大家如何自定义ViewGroup,如果你对自定义ViewGroup还不是很了解,或者正想学习如何自定义,那么你可以好好看看这篇博客。1、......
  • 什么是模块化?为什么要模块化
    模块化是一种处理复杂系统分解为更好的可管理模块的方式。所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数。模块化开发使用代码耦合度降低,模块化的意义在于最大化的设计重用,以最少的模块、零部件,更快速的满......
  • 深入理解Magento – 第七章 – 自定义Magento系统配置
    深入理解Magento作者:AlanStorm翻译:HailongZhang第七章–自定义Magento系统配置Magento拥有十分强大的后台管理系统。作为一名开发人员,这套后台管理系统可以让你的用户简单直接的配置Magento系统或者你创建的模块。和Magento的其他功能一样,你第一次使用这套管理系统的时候可......
  • 内置Lsp模块打包(以bili为例)
    下载安装Java11(官方地址需要登录)https://www.xitongzhijia.net/soft/244376.html下载lspatch.jarhttps://github.com/LSPosed/LSPatch/releases下载哔哩漫游、哔哩哔哩https://github.com/yujincheng08/BiliRoaming/actions放在同一文件夹Powershell运行(app.apk是模块)java......
  • android 评分条 RatingBar 使用及自定义
    一、先上效果图片:  第一个是自定义;  第二个是原生的: 二、atingBarRatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndica......
  • Halo自定义部分扩展
    简介Halo是一款现代化的开源博客/CMS系统,前端由Vue,后端java开发的。我选择的原因是因为是java开发的,所以方便我自定义的扩展。MinIO扩展在我们写博客的时候经常会用到图片,Halo支持多种文件存储方式。这里我选择了MinIO,但是在使用的过程中发现了一个小的问题,它上传的文件是按照......