public override void ConfigServices(ModuleConfigServiceContext context)
 {
     context.Services.AddTransient(provider =>
     {
         return(provider.GetService <IMiCakeProxyProvider>().GetMiCakeProxy());
     });
 }
示例#2
0
        /// <summary>
        /// Initialize micake services
        /// </summary>
        public void Initialize()
        {
            if (_isInitialized)
            {
                throw new InvalidOperationException($"MiCake has already build common services." +
                                                    $"The {nameof(Initialize)} method only can called once!");
            }

            if (_entryType == null)
            {
                throw new NullReferenceException($"Cannot find entry module type,Please marke sure you has already call {nameof(SetEntry)} method.");
            }

            AddMiCakeCoreSerivces(_services);

            //Find all micake modules according to the entry module type
            ModuleManager.PopulateModules(_entryType);
            _services.AddSingleton(ModuleContext);

            var loggerFactory = _services.BuildServiceProvider().GetRequiredService <ILoggerFactory>()
                                ?? NullLoggerFactory.Instance;

            _miCakeModuleBoot = new MiCakeModuleBoot(loggerFactory, ModuleContext.AllModules);
            //auto register services to di.
            _miCakeModuleBoot.AddConfigService(AutoRegisterServices);

            var configServiceContext = new ModuleConfigServiceContext(
                _services,
                ModuleContext.MiCakeModules,
                ApplicationOptions);

            _miCakeModuleBoot.ConfigServices(configServiceContext);
        }
示例#3
0
        public override void PreConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            services.AddTransient <IDomainObjectModelProvider, DefaultDomainObjectModelProvider>();
            services.AddSingleton <DomainObjectFactory>();
            services.AddSingleton <IDomainMetadataProvider, DomainMetadataProvider>();
            services.AddSingleton(factory =>
            {
                var provider = factory.GetService <IDomainMetadataProvider>();
                return(provider.GetDomainMetadata());
            });

            services.AddTransient <IPersistentObjectActivator, PersistentObjectActivator>();

            services.AddScoped(typeof(IRepository <,>), typeof(ProxyRepository <,>));
            services.AddScoped(typeof(IReadOnlyRepository <,>), typeof(ProxyReadOnlyRepository <,>));
            services.AddScoped(typeof(IRepositoryFactory <,>), typeof(DefaultRepositoryFacotry <,>));
            services.AddScoped(typeof(IFreeRepository <,>), typeof(ProxyFreeRepository <,>));
            services.AddScoped(typeof(IReadOnlyFreeRepository <,>), typeof(ProxyReadOnlyFreeRepository <,>));
            services.AddScoped(typeof(IFreeRepositoryFactory <,>), typeof(DefaultFreeRepositoryFactory <,>));

            //LifeTime
            services.AddScoped <IRepositoryPreSaveChanges, DomainEventsRepositoryLifetime>();
        }
示例#4
0
        public override void ConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            services.AddSingleton <IDataWrapperExecutor, DefaultWrapperExecutor>();
            services.AddSingleton <IConfigureOptions <MvcOptions>, MvcOptionsConfigure>();
        }
示例#5
0
        public override void ConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            //add jwt supporter.
            services.TryAddSingleton <IJwtSupporter, JwtSupporter>();
            services.AddOptions <MiCakeJwtOptions>();
        }
 public override void PreConfigServices(ModuleConfigServiceContext context)
 {
     context.Services.AddSingleton <IAutofacLocator, AutofacLocator>(provider =>
     {
         AutofacLocator.Instance.Locator = provider.GetAutofacRoot();
         return(AutofacLocator.Instance);
     });
 }
示例#7
0
        public override void PreConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            services.TryAddTransient <IEFSaveChangesLifetime, DefaultEFSaveChangesLifetime>();
            //add ef repository provider
            services.AddScoped(typeof(IRepositoryProvider <,>), typeof(EFRepositoryProvider <,>));
        }
示例#8
0
 public override void ConfigServices(ModuleConfigServiceContext context)
 {
     context.RegisterRepository <IStepFlyUserRepository, StepFlyUserRepository>();
     context.RegisterRepository <IHomeConfigRepository, HomeConfigRepository>();
     context.RegisterRepository <INoticeRepository, NoticeRepository>();
     context.RegisterRepository <IUserRoleRepository, UserRoleRepository>();
     context.RegisterRepository <IFeedbackRepository, FeedbackRepository>();
     context.RegisterRepository <IStepFlyHistoryRepository, StepFlyHistoryRepository>();
     context.RegisterRepository <IVIPUserRepository, VIPUserRepository>();
 }
示例#9
0
        public override void PreConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;
            var moudules = context.MiCakeModules;

            //regiter all domain event handler to services
            services.ResigterDomainEventHandler(moudules);

            services.AddSingleton <IEventDispatcher, EventDispatcher>();
        }
示例#10
0
        public override void ConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            services.AddSingleton <IDataWrapperExecutor, DefaultWrapperExecutor>();
            services.AddSingleton <IConfigureOptions <MvcOptions>, MvcOptionsConfigure>();

            //This services is only use in asp net core middleware.
            services.AddScoped <IMiCakeCurrentRequestContext, MiCakeCurrentRequestContext>();
        }
示例#11
0
        public override void PreConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            //add ef repository provider
            services.AddScoped(typeof(IRepositoryProvider <,>), typeof(EFRepositoryProvider <,>));

            //[Cancel:See Azure Board #ISSUE 12] add ef core interceptor
            //services.AddScoped(typeof(SaveChangesInterceptor));
        }
示例#12
0
        //Inject service into container according to matching rules
        private void AutoRegisterServices(ModuleConfigServiceContext context)
        {
            var serviceRegistrar = new DefaultServiceRegistrar(context.Services);

            if (ApplicationOptions.FindAutoServiceTypes != null)
            {
                serviceRegistrar.SetServiceTypesFinder(ApplicationOptions.FindAutoServiceTypes);
            }

            serviceRegistrar.Register(context.MiCakeModules);
        }
示例#13
0
        public override void ConfigServices(ModuleConfigServiceContext context)
        {
            //todo : if iunitofworkmanager life is singleton,Internal context will be in conflict.
            context.Services.AddScoped <IUnitOfWorkManager, UnitOfWorkManager>();
            context.Services.AddTransient <IUnitOfWork, UnitOfWork>();

            var defaultUowOptions = new UnitOfWorkDefaultOptions()
            {
                Limit = UnitOfWorkLimit.Required
            };

            context.Services.AddSingleton(Microsoft.Extensions.Options.Options.Create(defaultUowOptions));
        }
示例#14
0
        public override void PreConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            services.TryAddTransient <IEFSaveChangesLifetime, DefaultEFSaveChangesLifetime>();
            //add ef repository provider
            services.AddScoped(typeof(IRepositoryProvider <,>), typeof(EFRepositoryProvider <,>));
            services.AddScoped(typeof(IFreeRepositoryProvider <,>), typeof(EFFreeRepositoryProvider <,>));

            services.AddTransient(typeof(EFCorePoManager <,>));

            //[Cancel:See Azure Board #ISSUE 12] add ef core interceptor
            //services.AddScoped(typeof(SaveChangesInterceptor));
        }
示例#15
0
        public override void PostConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;
            var modules  = context.MiCakeModules;

            //Select UseAutoMapperAttribute module.
            var autoMapperAsms = modules.Where(s => s.ModuleType.GetCustomAttribute <UseAutoMapperAttribute>() != null)
                                 .Select(s => s.Assembly).ToArray();

            services.AddAutoMapper(cfg =>
            {
                cfg.DisableConstructorMapping();
            },
                                   autoMapperAsms);
        }
示例#16
0
        /// <summary>
        /// Add customer repository.
        /// </summary>
        /// <param name="serviceType">Interface type of repository</param>
        /// <param name="implementationType">Implementation type of repository</param>
        public static void RegisterRepository(this ModuleConfigServiceContext context, Type serviceType, Type implementationType)
        {
            if (!DomainTypeHelper.IsRepository(serviceType))
            {
                throw new ArgumentException($"{serviceType.FullName} is not a {nameof(IRepository)},Please give a right type!");
            }

            if (!DomainTypeHelper.IsRepository(implementationType))
            {
                throw new ArgumentException($"{implementationType.FullName} is not a {nameof(IRepository)},Please give a right type!");
            }

            var services = context.Services;

            services.AddTransient(serviceType, implementationType);
        }
        /// <summary>
        /// Add customer <see cref="IDomainService"/>
        /// </summary>
        /// <param name="context"></param>
        /// <param name="serviceType">Interface type of domain service</param>
        /// <param name="implementationType">ImplementationType type of domain service</param>
        /// <param name="miCakeServiceLifeTime"><see cref="MiCakeServiceLifetime"/></param>
        public static void RegisterDomainService(
            this ModuleConfigServiceContext context,
            Type serviceType,
            Type implementationType,
            MiCakeServiceLifetime miCakeServiceLifeTime = MiCakeServiceLifetime.Transient)
        {
            if (!DomainTypeHelper.IsDomainService(serviceType))
            {
                throw new ArgumentException($"{serviceType.FullName} is not a domain service,Please give a right type!");
            }

            if (!DomainTypeHelper.IsRepository(implementationType))
            {
                throw new ArgumentException($"{implementationType.FullName} is not a domain service,Please give a right type!");
            }

            var serviceDescpritor = new ServiceDescriptor(serviceType, implementationType, miCakeServiceLifeTime.ConvertToMSLifetime());

            context.Services.TryAdd(serviceDescpritor);
        }
示例#18
0
        public override void ConfigServices(ModuleConfigServiceContext context)
        {
            var auditOptions = (MiCakeAuditOptions)context.MiCakeApplicationOptions.AdditionalInfo.TakeOut(MiCakeBuilderAuditCoreExtension.AuditForApplicationOptionsKey);
            var services     = context.Services;

            if (auditOptions?.UseAudit != false)
            {
                //Audit Executor
                services.AddScoped <IAuditExecutor, DefaultAuditExecutor>();
                //Audit CreationTime and ModifationTime
                services.AddScoped <IAuditProvider, DefaultTimeAuditProvider>();
                //RepositoryLifeTime
                services.AddTransient <IRepositoryPreSaveChanges, AuditRepositoryLifetime>();

                if (auditOptions?.UseSoftDeletion != false)
                {
                    //Audit Deletion Time
                    services.AddScoped <IAuditProvider, SoftDeletionAuditProvider>();
                    //RepositoryLifeTime
                    services.AddTransient <IRepositoryPreSaveChanges, SoftDeletionRepositoryLifetime>();
                }
            }
        }
示例#19
0
 public override void ConfigServices(ModuleConfigServiceContext context)
 {
     context.RegisterRepository <IItineraryRepository, ItineraryRepository>();
     context.RegisterRepository <IUserRepository, UserRepository>();
     context.RegisterRepository <INewIdeaRepository, NewIdeaRepository>();
 }
示例#20
0
 public override void ConfigServices(ModuleConfigServiceContext context)
 {
     var services = context.Services;
 }
示例#21
0
 public override void PreConfigServices(ModuleConfigServiceContext context)
 {
     StoreConfig.Instance.AddModelProvider(new SoftDeletionStoreEntityConfig());
 }
示例#22
0
 /// <summary>
 /// Add customer repository.
 /// </summary>
 /// <typeparam name="TService">Interface type of repository</typeparam>
 /// <typeparam name="TImpl">Implementation type of repository</typeparam>
 public static void RegisterRepository <TService, TImpl>(this ModuleConfigServiceContext context)
 {
     RegisterRepository(context, typeof(TService), typeof(TImpl));
 }
示例#23
0
 public override void ConfigServices(ModuleConfigServiceContext context)
 {
     context.RegisterRepository <IUserRepository, UserRepository>();
     context.RegisterRepository <IUserWithWechatRepository, UserWithWechatRepository>();
 }
示例#24
0
 public virtual void PreConfigServices(ModuleConfigServiceContext context)
 {
 }
示例#25
0
 public override void ConfigServices(ModuleConfigServiceContext context)
 {
     context.AutoRegisterRepositories(typeof(BaseMiCakeModule).Assembly);
 }
示例#26
0
        public override void ConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            services.AddMessageBus();
        }
 /// <summary>
 /// Add customer <see cref="IDomainService"/>
 /// </summary>
 /// <typeparam name="TService">Interface type of domain service</typeparam>
 /// <typeparam name="TImpl">ImplementationType type of domain service</typeparam>
 /// <param name="context"></param>
 /// <param name="miCakeServiceLifeTime"><see cref="MiCakeServiceLifetime"/></param>
 public static void RegisterDomainService <TService, TImpl>(
     this ModuleConfigServiceContext context,
     MiCakeServiceLifetime miCakeServiceLifeTime = MiCakeServiceLifetime.Transient)
 {
     RegisterDomainService(context, typeof(TService), typeof(TImpl), miCakeServiceLifeTime);
 }
        public override void ConfigServices(ModuleConfigServiceContext context)
        {
            var services = context.Services;

            services.TryAddSingleton <IPersistentObjectMapper, MapsterPersistentObjectMapper>();
        }
示例#29
0
 //添加需要所需要的注入服务
 public override void ConfigServices(ModuleConfigServiceContext context)
 {
     context.Services.AddSingleton <IUnitOfWorkManager, UnitOfWorkManager>();
     context.Services.AddTransient <IUnitOfWork, UnitOfWork>();
 }
示例#30
0
 public override void ConfigServices(ModuleConfigServiceContext context)
 {
 }