Skip to content

Instantly share code, notes, and snippets.

@jskeet
Created March 7, 2023 12:29
Show Gist options
  • Save jskeet/d816d22d9211ddc8f166393825a8367c to your computer and use it in GitHub Desktop.
Save jskeet/d816d22d9211ddc8f166393825a8367c to your computer and use it in GitHub Desktop.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
class Program
{
static async Task Main()
{
using IHost host = Host.CreateDefaultBuilder()
.ConfigureServices(services =>
{
services.AddSingleton<IDependency, Dependency>();
// This line *is* required.
services.AddSingleton<UnregisteredDependency>();
services.AddHostedService<SampleHostedService>();
})
.Build();
await host.RunAsync();
}
}
public interface IDependency
{
void LogPresence();
}
public class Dependency : IDependency
{
public void LogPresence()
{
Console.WriteLine("Dependency presence");
}
}
public class UnregisteredDependency
{
private readonly IDependency _dependency;
public UnregisteredDependency(IDependency dependency) =>
_dependency = dependency;
public void LogDependencyPresence() => _dependency.LogPresence();
}
public class SampleHostedService : IHostedService
{
private readonly UnregisteredDependency _unregisteredDependency;
public SampleHostedService(UnregisteredDependency unregisteredDependency) =>
_unregisteredDependency = unregisteredDependency;
public Task StartAsync(CancellationToken cancellationToken)
{
Console.WriteLine("Starting service");
_unregisteredDependency.LogDependencyPresence();
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment