示例#1
0
        public WeatherStrategy()
        {
            var appConfig = new ModulesConfig();

            _weatherApiUrl = $"{appConfig.OpenWeatherUrl}?appid={appConfig.OpenWeatherKey}&units=metric";
        }
示例#2
0
        public async Task LoadModules(ContainerBuilder builder, IMvcBuilder mvcBuilder)
        {
            InvalidateModulesLock();

            var modulesConfig = new ModulesConfig(_options.ModulesFile);
            var modulesLock   = new ModulesLock(_options.ModulesLock);

            await modulesConfig.Reload();

            await modulesLock.Reload();

            var mazeProject = new MazeProject(_options, modulesConfig, modulesLock);

            _serviceCollection.AddSingleton <IModuleProject>(mazeProject);
            _serviceCollection.AddSingleton <PackageLockRequestManager>();
            _serviceCollection.AddSingleton <IModulePackageManager, ModulePackageManager>();
            _serviceCollection.AddSingleton <IVirtualModuleManager, VirtualModuleManager>();

            var provider       = _serviceCollection.BuildServiceProvider();
            var logger         = provider.GetService <ILogger <PackageInitialization> >();
            var packageManager = provider.GetService <IModulePackageManager>();

            logger.LogInformation("Initialize modules");

            //initialize all core frameworks
            foreach (var framework in mazeProject.FrameworkLibraries.Keys.Where(x => x != mazeProject.Framework))
            {
                logger.LogInformation("Initialize modules lock for {framework}", framework);
                var packages = await packageManager.GetPackagesLock(framework);

                await packageManager.EnsurePackagesInstalled(packages);
            }

            logger.LogInformation("Initialize modules lock for {framework}", mazeProject.Framework);
            var packageLock = await packageManager.GetPackagesLock(mazeProject.Framework);

            await packageManager.EnsurePackagesInstalled(packageLock);

            if (modulesConfig.Modules.Any())
            {
                logger.LogDebug("{count} modules found", modulesConfig.Modules.Count);

                var loader = new ModuleLoader(mazeProject, _configuration, AssemblyLoadContext.Default);
                await loader.Load(modulesConfig.Modules, packageLock);

                loader.ModuleTypeMap.Configure(builder);

                foreach (var assembly in loader.ModuleTypeMap.Assemblies)
                {
                    mvcBuilder.AddApplicationPart(assembly);
                }

                builder.RegisterInstance(new ModuleControllerProvider(loader.ModuleTypeMap)).AsImplementedInterfaces();
                builder.RegisterMazeServices(cache => cache.BuildCache(loader.ModuleTypeMap.Controllers));
            }
            else
            {
                logger.LogDebug("No modules found, startup empty");
                builder.RegisterInstance(new ModuleControllerProvider()).AsImplementedInterfaces();
                builder.RegisterMazeServices(cache => cache.BuildEmpty());
            }

            builder.RegisterInstance(modulesConfig).AsImplementedInterfaces();
            builder.RegisterInstance(modulesLock).AsImplementedInterfaces();
        }