public RoutePublisher( IRouteBuilder routeBuilder, ShellSettings shellSettings) { _routeBuilder = routeBuilder; _shellSettings = shellSettings; }
public SetupController(ISetupService setupService, ShellSettings shellSettings) { _setupService = setupService; _shellSettings = shellSettings; T = NullLocalizer.Instance; }
public DbContextFactoryHolder( ShellSettings shellSettings, IDataServicesProviderFactory dataServicesProviderFactory, IAppDataFolder appDataFolder) { _shellSettings = shellSettings; _dataServicesProviderFactory = dataServicesProviderFactory; _appDataFolder = appDataFolder; }
/// <summary> /// Creates a shell context based on shell settings /// </summary> public ShellContext CreateShellContext(ShellSettings settings) { if (settings.State == TenantState.Uninitialized) { Logger.Debug("Creating shell context for tenant {0} setup", settings.Name); return _shellContextFactory.CreateSetupContext(settings); } Logger.Debug("Creating shell context for tenant {0}", settings.Name); return _shellContextFactory.CreateShellContext(settings); }
public ShellSettings(ShellSettings settings) { _values = new Dictionary<string, string>(settings._values, StringComparer.OrdinalIgnoreCase); Name = settings.Name; DataProvider = settings.DataProvider; DataConnectionString = settings.DataConnectionString; DataTablePrefix = settings.DataTablePrefix; RequestUrlHost = settings.RequestUrlHost; RequestUrlPrefix = settings.RequestUrlPrefix; State = settings.State; }
public DefaultOrchardShell( IEnumerable<IRouteProvider> routeProviders, IRoutePublisher routePublisher, IEnumerable<IMiddlewareProvider> middlewareProviders, ShellSettings shellSettings, IServiceProvider serviceProvider) { _routeProviders = routeProviders; _routePublisher = routePublisher; _middlewareProviders = middlewareProviders; _shellSettings = shellSettings; _serviceProvider = serviceProvider; }
public IServiceProvider CreateContainer(ShellSettings settings, ShellBlueprint blueprint) { ServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddScoped<IOrchardShell, DefaultOrchardShell>(); serviceCollection.AddScoped<IRouteBuilder, DefaultShellRouteBuilder>(); serviceCollection.AddInstance(settings); serviceCollection.AddInstance(blueprint.Descriptor); serviceCollection.AddInstance(blueprint); foreach (var dependency in blueprint.Dependencies .Where(t => typeof (IModule).IsAssignableFrom(t.Type))) { Logger.Debug("IModule Type: {0}", dependency.Type); // TODO: Rewrite to get rid of reflection. var instance = (IModule) Activator.CreateInstance(dependency.Type); instance.Configure(serviceCollection); } foreach (var dependency in blueprint.Dependencies .Where(t => !typeof(IModule).IsAssignableFrom(t.Type))) { foreach (var interfaceType in dependency.Type.GetInterfaces() .Where(itf => typeof(IDependency).IsAssignableFrom(itf))) { Logger.Debug("Type: {0}, Interface Type: {1}", dependency.Type, interfaceType); if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) { serviceCollection.AddSingleton(interfaceType, dependency.Type); } else if (typeof(IUnitOfWorkDependency).IsAssignableFrom(interfaceType)) { serviceCollection.AddScoped(interfaceType, dependency.Type); } else if (typeof(ITransientDependency).IsAssignableFrom(interfaceType)) { serviceCollection.AddTransient(interfaceType, dependency.Type); } else { serviceCollection.AddScoped(interfaceType, dependency.Type); } } } return new WrappingServiceProvider(_serviceProvider, serviceCollection); }
public string Setup(SetupContext context) { string executionId = Guid.NewGuid().ToString(); // The vanilla Orchard distibution has the following features enabled. string[] hardcoded = { // Framework "OrchardVNext.Framework", // Core "Settings", // Test Modules "OrchardVNext.Demo", "OrchardVNext.Test1" }; context.EnabledFeatures = hardcoded.Union(context.EnabledFeatures ?? Enumerable.Empty<string>()).Distinct().ToList(); var shellSettings = new ShellSettings(_shellSettings); if (string.IsNullOrEmpty(shellSettings.DataProvider)) { shellSettings.DataProvider = context.DatabaseProvider; shellSettings.DataConnectionString = context.DatabaseConnectionString; shellSettings.DataTablePrefix = context.DatabaseTablePrefix; } // TODO: Add Encryption Settings in var shellDescriptor = new ShellDescriptor { Features = context.EnabledFeatures.Select(name => new ShellFeature { Name = name }) }; // creating a standalone environment. // in theory this environment can be used to resolve any normal components by interface, and those // components will exist entirely in isolation - no crossover between the safemode container currently in effect // must mark state as Running - otherwise standalone enviro is created "for setup" shellSettings.State = TenantState.Running; // TODO: Remove and mirror Orchard Setup shellSettings.RequestUrlHost = _httpContextAccessor.HttpContext.Request.Host.Value; shellSettings.DataProvider = "InMemory"; _shellSettingsManager.SaveSettings(shellSettings); return executionId; }
public SetupService( ShellSettings shellSettings, IOrchardHost orchardHost, IShellSettingsManager shellSettingsManager, IShellContainerFactory shellContainerFactory, ICompositionStrategy compositionStrategy, IExtensionManager extensionManager, IHttpContextAccessor httpContextAccessor) { _shellSettings = shellSettings; _orchardHost = orchardHost; _shellSettingsManager = shellSettingsManager; _shellContainerFactory = shellContainerFactory; _compositionStrategy = compositionStrategy; _extensionManager = extensionManager; _httpContextAccessor = httpContextAccessor; T = NullLocalizer.Instance; }
IEnumerable<ShellSettings> IShellSettingsManager.LoadSettings() { var tenantPaths = _appDataFolder .ListDirectories("Sites") .Select(path => _appDataFolder.MapPath(path)); var shellSettings = new List<ShellSettings>(); foreach (var tenantPath in tenantPaths) { Logger.Information("ShellSettings found in '{0}', attempting to load.", tenantPath); var configurationContainer = new ConfigurationBuilder() .AddJsonFile(_appDataFolder.Combine(tenantPath, string.Format(SettingsFileNameFormat, "json")), true) .AddXmlFile(_appDataFolder.Combine(tenantPath, string.Format(SettingsFileNameFormat, "xml")), true) .Add( new DefaultFileConfigurationSource( _appDataFolder.Combine(tenantPath, string.Format(SettingsFileNameFormat, "txt")), false)); var config = configurationContainer.Build(); var shellSetting = new ShellSettings { Name = config["Name"], DataConnectionString = config["DataConnectionString"], DataProvider = config["DataProvider"], DataTablePrefix = config["DataTablePrefix"], RequestUrlHost = config["RequestUrlHost"], RequestUrlPrefix = config["RequestUrlPrefix"] }; TenantState state; shellSetting.State = Enum.TryParse(config["State"], true, out state) ? state : TenantState.Uninitialized; shellSettings.Add(shellSetting); Logger.Information("Loaded ShellSettings for tenant '{0}'", shellSetting.Name); } return shellSettings; }
ShellContext IShellContextFactory.CreateShellContext( ShellSettings settings) { Logger.Information("Creating shell context for tenant {0}", settings.Name); var blueprint = _compositionStrategy.Compose(settings, MinimumShellDescriptor()); var provider = _shellContainerFactory.CreateContainer(settings, blueprint); try { return new ShellContext { Settings = settings, Blueprint = blueprint, LifetimeScope = provider, Shell = provider.GetRequiredService<IOrchardShell>() }; } catch (Exception ex) { Logger.Error(ex.ToString()); throw; } }
ShellContext IShellContextFactory.CreateSetupContext(ShellSettings settings) { Logger.Debug("No shell settings available. Creating shell context for setup"); var descriptor = new ShellDescriptor { SerialNumber = -1, Features = new[] { new ShellFeature { Name = "OrchardVNext.Setup" }, }, }; var blueprint = _compositionStrategy.Compose(settings, descriptor); var provider = _shellContainerFactory.CreateContainer(settings, blueprint); return new ShellContext { Settings = settings, Blueprint = blueprint, LifetimeScope = provider, Shell = provider.GetService<IOrchardShell>() }; }
public ClassFoo(ShellSettings shellSettings) { _shellSettings = shellSettings; }
void IShellSettingsManager.SaveSettings(ShellSettings shellSettings) { if (shellSettings == null) throw new ArgumentNullException(nameof(shellSettings)); if (string.IsNullOrWhiteSpace(shellSettings.Name)) throw new ArgumentException( "The Name property of the supplied ShellSettings object is null or empty; the settings cannot be saved.", nameof(shellSettings.Name)); Logger.Information("Saving ShellSettings for tenant '{0}'", shellSettings.Name); var tenantPath = _appDataFolder.MapPath(_appDataFolder.Combine("Sites", shellSettings.Name)); var configurationSource = new DefaultFileConfigurationSource( _appDataFolder.Combine(tenantPath, string.Format(SettingsFileNameFormat, "txt")), false); foreach (var key in shellSettings.Keys) { configurationSource.Set(key, (shellSettings[key] ?? string.Empty).ToString()); } configurationSource.Commit(); Logger.Information("Saved ShellSettings for tenant '{0}'", shellSettings.Name); }
void IOrchardShellHost.EndRequest(ShellSettings settings) { Logger.Debug("End Request for tenant {0}", settings.Name); }
public IServiceProvider CreateContainer(ShellSettings settings, ShellBlueprint blueprint) { IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(); serviceCollection.AddInstance(settings); serviceCollection.AddInstance(blueprint.Descriptor); serviceCollection.AddInstance(blueprint); foreach (var dependency in blueprint.Dependencies .Where(x => x.Type.Name == "ShellStartup" || x.Type.Name == (settings.Name + "ShellStartup"))) { _logger.LogDebug("Shell Startup: {0}", dependency.Type); // TODO: Rewrite to get rid of reflection. var instance = Activator.CreateInstance(dependency.Type); var info = instance.GetType(); info.GetMethod("ConfigureServices").Invoke(instance, new[] { serviceCollection }); } foreach (var dependency in blueprint.Dependencies .Where(t => typeof (IModule).IsAssignableFrom(t.Type))) { _logger.LogDebug("IModule Type: {0}", dependency.Type); // TODO: Rewrite to get rid of reflection. var instance = (IModule) Activator.CreateInstance(dependency.Type); instance.Configure(serviceCollection); } foreach (var dependency in blueprint.Dependencies .Where(t => !typeof(IModule).IsAssignableFrom(t.Type))) { foreach (var interfaceType in dependency.Type.GetInterfaces() .Where(itf => typeof(IDependency).IsAssignableFrom(itf))) { _logger.LogDebug("Type: {0}, Interface Type: {1}", dependency.Type, interfaceType); if (typeof(ISingletonDependency).IsAssignableFrom(interfaceType)) { serviceCollection.AddSingleton(interfaceType, dependency.Type); } else if (typeof(IUnitOfWorkDependency).IsAssignableFrom(interfaceType)) { serviceCollection.AddScoped(interfaceType, dependency.Type); } else if (typeof(ITransientDependency).IsAssignableFrom(interfaceType)) { serviceCollection.AddTransient(interfaceType, dependency.Type); } else { serviceCollection.AddScoped(interfaceType, dependency.Type); } } } return new WrappingServiceProvider(_serviceProvider, serviceCollection); }