using System; namespace DependencyInjection { public interface IDependent { void DoSomething(); } public class Dependent1 : IDependent { public void DoSomething() { Console.WriteLine("Hello from Dependent1"); } } public class Dependent2 : IDependent { public void DoSomething() { Console.WriteLine("Hello from Dependent2"); } } public class MainClass { private IDependent _dependent; public void SetDependency(IDependent dependent) { _dependent = dependent ?? throw new ArgumentNullException(nameof(dependent), "Argument cannot be null"); } public void DoSomething() { _dependent.DoSomething(); } } internal static class Program { private static void Main() { // Get the correct dependency var dependency = GetCorrectDependency(); // Create class var mainClass = new MainClass(); //Inject the dependency mainClass.SetDependency(dependency); mainClass.DoSomething(); Console.ReadLine(); } private static IDependent GetCorrectDependency() { return new Dependent1(); } } }