/// <summary> /// /// </summary> /// <param name="container"></param> /// <param name="config"></param> public static void ConfigureClientWorker(IServiceCollectionWrapper container, Action <ClientConfig> config) { string configName = $"Clientconfig_{GetUniqueNumber()}"; var conf = new ClientConfig(); conf.UrlProvider = new DefaultUrlProvider(conf.TypeReg, conf.AssemblyReg); config(conf); var(ConfigType, holder) = CreateConfigWithMarkerInterface <IntegratedHttpApiClientConfig>(configName); holder.TimeOut = conf.RemoteOperationTimeout; holder.urlProvider = conf.UrlProvider; holder.LastHandler = conf.LastHandler; container.AddSingleton(ConfigType, holder); //The config is now registered as a unique type in the container. conf.HttpHandlers.ForEach((h) => { if (h.register) { container.AddTransient(h.type); } }); //All HTTPHandlers is registerd.. (except those that should not :) var ProxyApiClientType = Utils.DynamicInherit <IntegratedHttpJsonApiClient>($"Client_{configName}", new Dictionary <Type, Type> { { typeof(IntegratedHttpApiClientConfig), ConfigType } }, typeof(ServiceCollectionExtension).GetMethod(nameof(FillTypes)), conf.HttpHandlers.Select(e => e.Item2).ToList()); container.AddScoped(ProxyApiClientType); foreach (var registerdInterface in conf.Clients) { container.AddTransient(registerdInterface, ProxyFactory.CreateProxyTypeFor(registerdInterface, ProxyApiClientType)); //Create the type with the correct dependencies... } }
/// <summary> /// Initializes new ConfigServerClientBuilder /// </summary> /// <param name="serviceCollection">Application Service collection</param> public ConfigServerClientBuilder(IServiceCollectionWrapper serviceCollection) { this.serviceCollection = serviceCollection; var configurationCollection = new ConfigurationRegistry(); ConfigurationRegistry = configurationCollection; serviceCollection.AddSingleton <IConfigurationRegistry>(configurationCollection); }
/// <summary> /// Adds ConfigServer client to specified ServiceCollection /// </summary> /// <param name="source">The IServiceCollection to add ConfigServer client to</param> /// <param name="options">Options for ConfigServer client</param> /// <returns>ConfigServer client builder for further configuration</returns> public static ConfigServerClientBuilder AddConfigServerClient(this IServiceCollectionWrapper source, ConfigServerClientOptions options) { return(SetUpBuilder(new ConfigServerClientBuilder(source), options)); }