/// <summary> /// Adds an <see cref="ICustomResourceWatcher"/> for the specified custom resource type /// </summary> /// <typeparam name="TResource">The type of the custom resource to watch</typeparam> /// <param name="services">The <see cref="IServiceCollection"/> to configure</param> /// <param name="configuration">An <see cref="Action{T}"/> used to configure the <see cref="ICustomResourceWatcher"/> to use</param> /// <returns>The configured <see cref="IServiceCollection"/></returns> public static IServiceCollection AddCustomResourceWatcher <TResource>(this IServiceCollection services, Action <ICustomResourceWatcherOptionsBuilder> configuration) where TResource : class, ICustomResource, new() { services.TryAddSingleton(typeof(ICustomResourceWatcher <TResource>), provider => { ICustomResourceWatcherOptionsBuilder optionsBuilder = new CustomResourceWatcherOptionsBuilder(); configuration(optionsBuilder); CustomResourceWatcherOptions options = optionsBuilder.Build(); return(ActivatorUtilities.CreateInstance <CustomResourceWatcher <TResource> >(provider, options)); }); return(services); }
/// <summary> /// Initializes a new <see cref="ICustomResourceWatcher{TResource}"/>. /// </summary> /// <param name="logger">The service used to perform logging</param> /// <param name="kubernetes">The service used to communicate with Kubernetes.</param> /// <param name="options">The current <see cref="CustomResourceWatcherOptions"/></param> public CustomResourceWatcher(ILogger <CustomResourceWatcher <TResource> > logger, IKubernetes kubernetes, CustomResourceWatcherOptions options) { this.Logger = logger; this.Kubernetes = kubernetes; this.ResourceDefinition = new TResource().Definition; this.Options = options; this.StartAsync(); }