diff --git a/examples/webApiDependencyInjection/Program.cs b/examples/webApiDependencyInjection/Program.cs index 976e18d..3ec631b 100644 --- a/examples/webApiDependencyInjection/Program.cs +++ b/examples/webApiDependencyInjection/Program.cs @@ -6,7 +6,7 @@ var builder = WebApplication.CreateBuilder(args); var kubernetesClientConfig = KubernetesClientConfiguration.BuildDefaultConfig(); // Register Kubernetes client interface as sigleton -builder.Services.AddSingleton(new Kubernetes(kubernetesClientConfig)); +builder.Services.AddSingleton(_ => new Kubernetes(kubernetesClientConfig)); // Add services to the container. builder.Services.AddEndpointsApiExplorer(); diff --git a/examples/workerServiceDependencyInjection/Program.cs b/examples/workerServiceDependencyInjection/Program.cs new file mode 100644 index 0000000..59bf3cf --- /dev/null +++ b/examples/workerServiceDependencyInjection/Program.cs @@ -0,0 +1,17 @@ +using k8s; +using workerServiceDependencyInjection; + +IHost host = Host.CreateDefaultBuilder(args) + .ConfigureServices(services => + { + // Load kubernetes configuration + var kubernetesClientConfig = KubernetesClientConfiguration.BuildDefaultConfig(); + + // Register Kubernetes client interface as sigleton + services.AddSingleton(_ => new Kubernetes(kubernetesClientConfig)); + + services.AddHostedService(); + }) + .Build(); + +await host.RunAsync(); diff --git a/examples/workerServiceDependencyInjection/Worker.cs b/examples/workerServiceDependencyInjection/Worker.cs new file mode 100644 index 0000000..87d2ecf --- /dev/null +++ b/examples/workerServiceDependencyInjection/Worker.cs @@ -0,0 +1,40 @@ +using k8s; + +namespace workerServiceDependencyInjection +{ + public class Worker : BackgroundService + { + private readonly ILogger logger; + private readonly IKubernetes kubernetesClient; + + /// + /// Inject in the constructor the IKubernetes interface. + /// + /// + /// + public Worker(ILogger logger, IKubernetes kubernetesClient) + { + this.logger = logger; + this.kubernetesClient = kubernetesClient; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + while (!stoppingToken.IsCancellationRequested) + { + logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); + + // Read the list of pods contained in default namespace + var podList = kubernetesClient.CoreV1.ListNamespacedPod("default"); + + // Print pods names + foreach (var pod in podList.Items) + { + Console.WriteLine(pod.Metadata.Name); + } + + await Task.Delay(1000, stoppingToken); + } + } + } +} diff --git a/examples/workerServiceDependencyInjection/appsettings.Development.json b/examples/workerServiceDependencyInjection/appsettings.Development.json new file mode 100644 index 0000000..b2dcdb6 --- /dev/null +++ b/examples/workerServiceDependencyInjection/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/examples/workerServiceDependencyInjection/appsettings.json b/examples/workerServiceDependencyInjection/appsettings.json new file mode 100644 index 0000000..b2dcdb6 --- /dev/null +++ b/examples/workerServiceDependencyInjection/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/examples/workerServiceDependencyInjection/workerServiceDependencyInjection.csproj b/examples/workerServiceDependencyInjection/workerServiceDependencyInjection.csproj new file mode 100644 index 0000000..accf7dd --- /dev/null +++ b/examples/workerServiceDependencyInjection/workerServiceDependencyInjection.csproj @@ -0,0 +1,11 @@ + + + + enable + enable + + + + + + diff --git a/kubernetes-client.sln b/kubernetes-client.sln index aead500..488798e 100644 --- a/kubernetes-client.sln +++ b/kubernetes-client.sln @@ -67,7 +67,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kubectl.Tests", "tests\Kube EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "openTelemetryConsole", "examples\openTelemetryConsole\openTelemetryConsole.csproj", "{8E266190-AE6E-44A8-948D-BD974AA82428}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "webApiDependencyInjection", "examples\webApiDependencyInjection\webApiDependencyInjection.csproj", "{C0759F88-A010-4DEF-BD3B-E183D3328FFC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "webApiDependencyInjection", "examples\webApiDependencyInjection\webApiDependencyInjection.csproj", "{C0759F88-A010-4DEF-BD3B-E183D3328FFC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "workerServiceDependencyInjection", "examples\workerServiceDependencyInjection\workerServiceDependencyInjection.csproj", "{05DC8884-AC54-4603-AC25-AE9D9F24E7AE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -439,6 +441,18 @@ Global {C0759F88-A010-4DEF-BD3B-E183D3328FFC}.Release|x64.Build.0 = Release|Any CPU {C0759F88-A010-4DEF-BD3B-E183D3328FFC}.Release|x86.ActiveCfg = Release|Any CPU {C0759F88-A010-4DEF-BD3B-E183D3328FFC}.Release|x86.Build.0 = Release|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Debug|x64.ActiveCfg = Debug|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Debug|x64.Build.0 = Debug|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Debug|x86.ActiveCfg = Debug|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Debug|x86.Build.0 = Debug|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Release|Any CPU.Build.0 = Release|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Release|x64.ActiveCfg = Release|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Release|x64.Build.0 = Release|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Release|x86.ActiveCfg = Release|Any CPU + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -474,6 +488,7 @@ Global {9128F6DC-6B7A-417F-937A-90461D6989A8} = {8AF4A5C2-F0CE-47D5-A4C5-FE4AB83CA509} {8E266190-AE6E-44A8-948D-BD974AA82428} = {B70AFB57-57C9-46DC-84BE-11B7DDD34B40} {C0759F88-A010-4DEF-BD3B-E183D3328FFC} = {B70AFB57-57C9-46DC-84BE-11B7DDD34B40} + {05DC8884-AC54-4603-AC25-AE9D9F24E7AE} = {B70AFB57-57C9-46DC-84BE-11B7DDD34B40} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {049A763A-C891-4E8D-80CF-89DD3E22ADC7}