Ejemplo n.º 1
0
        internal static IMiCakeModuleCollection CombineNormalAndFeatureModules(
            IMiCakeModuleCollection normalModules,
            IMiCakeModuleCollection featureModules)
        {
            IMiCakeModuleCollection miCakeModules = new MiCakeModuleCollection();
            var assignFeatureModules = AssignFeatureModules(featureModules);

            Queue <IMiCakeModuleCollection> moduleQueue = new Queue <IMiCakeModuleCollection>();

            moduleQueue.Enqueue(assignFeatureModules.before);
            moduleQueue.Enqueue(normalModules);
            moduleQueue.Enqueue(assignFeatureModules.after);

            var count = moduleQueue.Count;

            for (int i = 0; i < count; i++)
            {
                var modules = moduleQueue.Dequeue();
                foreach (var module in modules)
                {
                    miCakeModules.AddIfNotContains(module);
                }
            }
            return(miCakeModules);
        }
Ejemplo n.º 2
0
        public DefaultDomainObjectModelProvider(
            IMiCakeModuleContext moduleContext)
        {
            CheckValue.NotNull(moduleContext, nameof(moduleContext));

            _exceptedModules = moduleContext.MiCakeModules.Where(s => !s.Instance.IsFrameworkLevel)
                               .ToMiCakeModuleCollection();
        }
Ejemplo n.º 3
0
 public MiCakeModuleBoot(
     ILoggerFactory loggerFactory,
     IMiCakeModuleCollection modules)
 {
     _logger       = loggerFactory.CreateLogger("MiCake.Core.Modularity.MiCakeModuleBoot");
     _moduleLogger = new MiCakeModuleLogger(_logger);
     _modules      = modules;
 }
Ejemplo n.º 4
0
 public MiCakeModuleContext(
     IMiCakeModuleCollection allModules,
     IMiCakeModuleCollection normalModules,
     IMiCakeModuleCollection featureModules)
 {
     AllModules     = allModules;
     MiCakeModules  = normalModules;
     FeatureModules = featureModules;
 }
 public ModuleConfigServiceContext(
     IServiceCollection services,
     IMiCakeModuleCollection miCakeModules,
     MiCakeApplicationOptions miCakeApplication)
 {
     Services                 = services;
     MiCakeModules            = miCakeModules;
     MiCakeApplicationOptions = miCakeApplication;
 }
Ejemplo n.º 6
0
 public ModuleBearingContext(
     IServiceProvider serviceProvider,
     IMiCakeModuleCollection miCakeModules,
     MiCakeApplicationOptions applicationOptions
     )
 {
     ServiceProvider          = serviceProvider;
     MiCakeModules            = miCakeModules;
     MiCakeApplicationOptions = applicationOptions;
 }
Ejemplo n.º 7
0
        public void PopulateModules(Type entryType)
        {
            if (_isPopulate)
            {
                throw new InvalidOperationException("PopulateDefaultModule can only be called once.");
            }

            _isPopulate = true;

            MiCakeModuleHelper.FindAllModulesFromEntry(_normalModulesTypes, entryType);
            IMiCakeModuleCollection normalModules = ResolvingMiCakeModules(_normalModulesTypes)
                                                    .ToMiCakeModuleCollection();

            //Ensure that the position of the entry module is the last
            if (normalModules[^ 1].ModuleType != entryType)
Ejemplo n.º 8
0
 private void StartModuleLifetime(
     IMiCakeModuleCollection modules,
     IEnumerable <ModuleBootInfo> lifetimes,
     object contextInfo)
 {
     foreach (var lifetimeInfo in lifetimes)
     {
         foreach (var module in modules)
         {
             //logging current module info.
             _moduleLogger.LogModuleInfo(module, $"MiCake {lifetimeInfo.Description}: ");
             //execute current module lifetime.
             lifetimeInfo.StartAction(module.Instance, contextInfo);
         }
     }
 }
Ejemplo n.º 9
0
        public virtual void Register(IMiCakeModuleCollection miCakeModules)
        {
            var injectServices = new List <InjectServiceInfo>();

            //filter need register modules
            var needRegitsterModules = miCakeModules.Where(s => s.Instance.IsAutoRegisterServices)
                                       .ToMiCakeModuleCollection();

            var assemblies = needRegitsterModules.GetAssemblies();

            foreach (var assembly in assemblies)
            {
                var types = assembly.GetTypes().Where(type => type.IsClass & !type.IsAbstract & !type.IsSealed).ToList();

                foreach (var type in types)
                {
                    var currentTypeServices = AddInjectServices(type);
                    if (currentTypeServices.Count != 0)
                    {
                        injectServices.AddRange(currentTypeServices);
                    }
                }
            }

            foreach (var serviceInfo in injectServices)
            {
                var serviceLifetime = serviceInfo.Lifetime.HasValue ?
                                      serviceInfo.Lifetime.Value.ConvertToMSLifetime() :
                                      ServiceLifetime.Transient;

                var serviceDescriptor = new ServiceDescriptor(serviceInfo.Type, serviceInfo.ImplementationType, serviceLifetime);

                if (serviceInfo.ReplaceServices)
                {
                    _services.Replace(serviceDescriptor);
                }
                else if (serviceInfo.TryRegister)
                {
                    _services.TryAdd(serviceDescriptor);
                }
                else
                {
                    _services.Add(serviceDescriptor);
                }
            }
        }
Ejemplo n.º 10
0
        //Base on MediatR.Registration
        //see https://github.com/jbogard/MediatR.Extensions.Microsoft.DependencyInjection
        public static void ResigterDomainEventHandler(this IServiceCollection services, IMiCakeModuleCollection miCakeModules)
        {
            var assemblies = miCakeModules.GetAssemblies(false).ToList();

            ConnectImplementationsToTypesClosing(typeof(IDomainEventHandler <>), services, assemblies, true);
        }
Ejemplo n.º 11
0
 private Assembly[] GetDomianLayer(IMiCakeModuleCollection miCakeModules)
 {
     return(miCakeModules.GetAssemblies(false).Where(asm =>
                                                     asm.GetTypes().AsEnumerable().Any(inModuleType =>
                                                                                       DomainTypeHelper.IsDomainObject(inModuleType))).ToArray());
 }
Ejemplo n.º 12
0
 public MiCakeModuleContext()
 {
     AllModules     = new MiCakeModuleCollection();
     MiCakeModules  = new MiCakeModuleCollection();
     FeatureModules = new MiCakeModuleCollection();
 }
Ejemplo n.º 13
0
        private static (IMiCakeModuleCollection before, IMiCakeModuleCollection after) AssignFeatureModules(IMiCakeModuleCollection featureModules)
        {
            var beforeFeatureModules = new MiCakeModuleCollection();
            var afterFeatureModules  = new MiCakeModuleCollection();

            foreach (var featureModule in featureModules)
            {
                bool depencyIsAfter = featureModule.RelyOnModules.Any(module =>
                                                                      ((IFeatureModule)module.Instance).Order == FeatureModuleLoadOrder.AfterCommonModule);

                var currentOrder = ((IFeatureModule)featureModule.Instance).Order;
                if (!depencyIsAfter && currentOrder == FeatureModuleLoadOrder.BeforeCommonModule)
                {
                    beforeFeatureModules.Add(featureModule);
                }
                else
                {
                    afterFeatureModules.Add(featureModule);
                }
            }

            return(beforeFeatureModules, afterFeatureModules);
        }
Ejemplo n.º 14
0
 public ModuleInspectionContext(IServiceProvider serviceProvider, IMiCakeModuleCollection miCakeModules)
 {
     AppServiceProvider = serviceProvider;
     MiCakeModules      = miCakeModules;
 }