/// <summary>
        /// Adds modules services to the specified <see cref="Microsoft.Extensions.DependencyInjection.IServiceCollection"/>.
        /// </summary>
        public static IServiceCollection AddModules(this IServiceCollection services, Action <ModularServiceCollection> configure = null)
        {
            services.AddWebHost();
            services.AddManifestDefinition("Module.txt", "module");
            services.AddExtensionLocation(Application.ModulesPath);

            // ModularTenantRouterMiddleware which is configured with UseModules() calls UserRouter() which requires the routing services to be
            // registered. This is also called by AddMvcCore() but some applications that do not enlist into MVC will need it too.
            services.AddRouting();

            var modularServiceCollection = new ModularServiceCollection(services);

            // Use a single tenant and all features by default
            modularServiceCollection.Configure(internalServices =>
                                               internalServices.AddAllFeaturesDescriptor()
                                               );

            // Let the app change the default tenant behavior and set of features
            configure?.Invoke(modularServiceCollection);

            // Register the list of services to be resolved later on
            services.AddSingleton(_ => services);

            return(services);
        }
コード例 #2
0
        /// <summary>
        /// Registers a single tenant with all the available features. This is the default behavior.
        /// </summary>
        public static ModularServiceCollection WithAllFeatures(this ModularServiceCollection modules)
        {
            modules.Configure(services =>
            {
                services.AddAllFeaturesDescriptor();
            });

            return(modules);
        }
        public static ModularServiceCollection AddMvcModules(this ModularServiceCollection moduleServices,
                                                             IServiceProvider applicationServices)
        {
            moduleServices.Configure(services =>
            {
                services.AddMvcModules(applicationServices);
            });

            return(moduleServices);
        }
コード例 #4
0
        /// <summary>
        /// Registers tenants defined in configuration.
        /// </summary>
        public static ModularServiceCollection WithTenants(this ModularServiceCollection modules)
        {
            modules.Configure(services =>
            {
                services.AddScoped <IShellSettingsManager, FileShellSettingsManager>();
                services.AddScoped <IShellDescriptorManager, FileShellDescriptorManager>();
            });

            return(modules);
        }
コード例 #5
0
        /// <summary>
        /// Registers a <see cref="IConfiguration"/> object that can be used by the modules.
        /// </summary>
        /// <returns></returns>
        public static ModularServiceCollection WithConfiguration(
            this ModularServiceCollection modules, IConfiguration configuration)
        {
            // Register the configuration object for modules to register options with it
            if (configuration != null)
            {
                modules.Configure(services => services.AddSingleton <IConfiguration>(configuration));
            }

            return(modules);
        }
コード例 #6
0
        /// <summary>
        /// Registers a default tenant with a set of features that are used to setup and configure the actual tenants.
        /// For instance you can use this to add a custom Setup module.
        /// </summary>
        public static ModularServiceCollection WithDefaultFeatures(
            this ModularServiceCollection modules, params string[] featureIds)
        {
            modules.Configure(services =>
            {
                foreach (var featureId in featureIds)
                {
                    services.AddTransient(sp => new ShellFeature(featureId));
                }
                ;
            });

            return(modules);
        }
コード例 #7
0
        /// <summary>
        /// Registers a single tenant with the specified set of features.
        /// </summary>
        public static ModularServiceCollection WithFeatures(
            this ModularServiceCollection modules,
            params string[] featureIds)
        {
            var featuresList = featureIds.Select(featureId => new ShellFeature(featureId)).ToList();

            modules.Configure(services =>
            {
                foreach (var feature in featuresList)
                {
                    services.AddTransient(sp => feature);
                }
                ;

                services.AddSetFeaturesDescriptor(featuresList);
            });

            return(modules);
        }
コード例 #8
0
        /// <summary>
        /// Adds modules services to the specified <see cref="Microsoft.Extensions.DependencyInjection.IServiceCollection"/>.
        /// </summary>
        public static IServiceCollection AddModules(this IServiceCollection services, Action <ModularServiceCollection> configure = null)
        {
            services.AddWebHost();
            services.AddManifestDefinition("Module.txt", "module");
            services.AddExtensionLocation("Modules");
            services.AddExtensionLocation("Packages");

            var modularServiceCollection = new ModularServiceCollection(services);

            // Use a single tenant and all features by default
            modularServiceCollection.WithAllFeatures();

            // Let the app change the default tenant behavior and set of features
            configure?.Invoke(modularServiceCollection);

            // Register the list of services to be resolved later on
            services.AddSingleton(_ => services);

            return(services);
        }