internal static IDownlinkBuilder AddLocalPlugins(this IDownlinkBuilder builder, bool forceEnable = false) { if (forceEnable) { try { var scanner = new PluginScanner(); var root = new DirectoryInfo(Directory.GetCurrentDirectory()); var dlls = root.GetFiles("Downlink.Extensions.*.dll").ToList(); if (Directory.Exists("Downlink.Extensions")) { var extDir = new DirectoryInfo(Path.Combine(root.FullName, "Downlink.Extensions")); dlls.AddRange(extDir.GetFiles("Downlink.Extensions.*.dll", SearchOption.AllDirectories)); } var assemblies = dlls.Select(f => Assembly.LoadFile(f.FullName)); var modules = scanner.LoadModulesFromAssemblies(assemblies); foreach (var plugin in modules) { builder.AddPlugin(plugin); } } catch (System.Exception) { // ignored } } return(builder); }
public void AddServices(IDownlinkBuilder builder) { var provider = builder.Services.BuildServiceProvider(); var opts = provider?.GetService <DownlinkBuilderDefaults>() ?? new DownlinkBuilderDefaults(DownlinkBuilderOptions.None); var logger = provider?.GetService <ILogger <DownlinkDefaultServices> >(); if (opts.RegisterDefaultHandlers) { logger?.LogDebug("Registering default handlers"); builder.Services.AddSingleton <ProxyingResponseHandler>(); builder.Services.AddSingleton <RedirectingResponseHandler>(); builder.Services.AddSingleton <IResponseHandler>(ServiceFactory.GetResponseHandler); } if (opts.RegisterDefaultPatterns) { logger?.LogDebug("Registering default pattern matchers"); builder.Services.AddDefaultPatternMatchers(); } if (opts.RegisterDefaultSchemeClients) { logger?.LogDebug("Registering default scheme clients"); builder.Services.AddTransient <ISchemeClient, HttpDownloadClient>(); builder.Services.AddTransient <ISchemeClient, FileSchemeClient>(); } if (opts.RegisterDefaultStorage) { logger?.LogDebug("Registering default storage backends"); builder.Services.AddGitHubReleaseStorage(); builder.Services.AddS3Storage(); builder.Services.AddAzureStorage(); builder.Services.AddLocalStorage(); } builder.Services.AddFallbackStorage(); }
public void AddServices(IDownlinkBuilder builder) { if (_config.GetValue("Experimental:InjectContext", false)) { builder.Services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); } }
public static IDownlinkBuilder UseRouteBuilder(this IDownlinkBuilder builder, Type builderType) { if (builderType.IsAssignableTo <IRoutePrefixBuilder>()) { builder.Services.AddSingleton(typeof(IRoutePrefixBuilder), builderType); } return(builder); }
public static IDownlinkBuilder AddPlugin(this IDownlinkBuilder builder, params Type[] pluginType) { foreach (var type in pluginType) { builder.Services.AddSingleton(typeof(Composition.IDownlinkPlugin), type); } return(builder); }
public void AddServices(IDownlinkBuilder builder) { if (!builder.Services.Any(s => s.ServiceType == typeof(IRoutePrefixBuilder))) { _logger?.LogInformation("No route provider found, falling back to configuration!"); // such a hack job builder.Services.AddSingleton <IRoutePrefixBuilder, ConfigurationRoutePrefixBuilder>(); } if (!builder.Services.Any(s => s.ServiceType == typeof(IDownlinkRouteConvention))) { _logger?.LogDebug("No route convention provider found, falling back to default"); builder.Services.AddSingleton <IDownlinkRouteConvention, DownlinkRouteConvention>(); } builder.Services.Configure <MvcOptions>(opts => opts.Conventions.Add(builder.Services.BuildServiceProvider().GetService <IDownlinkRouteConvention>())); }
public void LoadPlugins(IDownlinkBuilder builder, IServiceProvider provider) { var plugins = provider.GetServices <IDownlinkPlugin>(); _logger.LogDebug("Resolved {0} plugins from provider.", plugins.Count()); foreach (var plugin in plugins) { var name = plugin.GetType().Name; try { _logger.LogDebug($"Registering '{name}' plugin"); plugin.AddServices(builder); _logger.LogInformation($"Successfully loaded '{name}' plugin!"); } catch (Exception ex) { _logger.LogWarning($"Plugin {name} failed to register!"); _logger.LogError(500, ex, ex.Message); } } }
public static IDownlinkBuilder AddPlugin <T>(this IDownlinkBuilder builder) where T : class, Composition.IDownlinkPlugin { builder.Services.AddSingleton <Composition.IDownlinkPlugin, T>(); return(builder); }
public static IDownlinkBuilder AddPatternMatcher <T>(this IDownlinkBuilder builder) where T : class, IPatternMatcher { builder.Services.AddTransient <IPatternMatcher, T>(); return(builder); }
internal static IDownlinkBuilder AddLocalPlugins(this IDownlinkBuilder builder, IConfiguration config) { var enable = config.GetValue("Experimental:EnableLocalPlugins", false); return(builder.AddLocalPlugins(enable)); }
public static IDownlinkBuilder AddStorage <T>(this IDownlinkBuilder builder) where T : class, IRemoteStorage { builder.Services.AddSingleton <IRemoteStorage, T>(); return(builder); }
public static IDownlinkBuilder AddResponseHandler <T>(this IDownlinkBuilder builder) where T : class, IResponseHandler { builder.Services.AddSingleton <IResponseHandler, T>(); return(builder); }
public static IDownlinkBuilder UseRouteBuilder <T>(this IDownlinkBuilder builder) where T : class, Infrastructure.IRoutePrefixBuilder { builder.Services.AddSingleton <IRoutePrefixBuilder, T>(); return(builder); }
public static IDownlinkBuilder UseRoutePrefix(this IDownlinkBuilder builder, string prefix) { builder.Services.AddSingleton <IRoutePrefixBuilder>(provider => new StaticRoutePrefixBuilder(prefix)); return(builder); }
public static IDownlinkBuilder AddSchemeClient <T>(this IDownlinkBuilder builder) where T : class, ISchemeClient { builder.Services.AddTransient <ISchemeClient, T>(); return(builder); }
public static IDownlinkBuilder AddNotificationHandler <T>(this IDownlinkBuilder builder) where T : class, MediatR.INotificationHandler <AppVersionResponseModel> { builder.Services.AddScoped <MediatR.INotificationHandler <AppVersionResponseModel>, T>(); return(builder); }
public static IDownlinkBuilder AddResponseAction(this IDownlinkBuilder builder, Action <AppVersionResponseModel> response) { builder.Services.AddTransient <MediatR.INotificationHandler <AppVersionResponseModel> >(provider => new Messaging.ActionNotification(response)); return(builder); }