public static void Main()
string description = "Broken down on main street";
DIPInsurranceIncident incident;
SetupMyFancyDependencyController(new OrdinaryCarService());
incident = new DIPInsurranceIncident(GetCarServiceFromFancyDependencyController(), myCar, description);
incident.HandleIncident();
SetupMyFancyDependencyController(new TestingCarService());
incident = new DIPInsurranceIncident(GetCarServiceFromFancyDependencyController(), myCar, description);
incident.HandleIncident();
SetupMyFancyDependencyController(new VerifiedCarService());
incident = new DIPInsurranceIncident(GetCarServiceFromFancyDependencyController(), myCar, description);
incident.HandleIncident();
private static void SetupMyFancyDependencyController(ICarService carService)
currentCarServiceImplementation = carService;
private static ICarService currentCarServiceImplementation;
private static ICarService GetCarServiceFromFancyDependencyController()
return currentCarServiceImplementation;
class FullyVerifiedCar: Car {}
class SomeCarFromBackYard: Car {}
Car GetReplacementCar(Car originalCar);
class OrdinaryCarService : ICarService
Car ICarService.GetReplacementCar(Car originalCar)
return GetOrdinaryReplacementCar(originalCar);
public Car GetOrdinaryReplacementCar(Car originalCar)
return new SomeCarFromBackYard();
class TestingCarService : ICarService
public Car GetReplacementCar(Car originalCar)
Console.WriteLine("I'm a mocked testing car service");
class VerifiedCarService : ICarService
public string Certificate {get {return "Certificate Signature"; }}
public Car GetReplacementCar(Car originalCar)
return new FullyVerifiedCar();
class DIPInsurranceIncident
public string IncidentDescription { get; set; }
public Car CarInIncident { get; set; }
public ICarService CarService { get; set; }
public DIPInsurranceIncident(ICarService service, Car carInIncident, string description)
CarInIncident = carInIncident;
IncidentDescription = description;
public void HandleIncident()
Car getReplacementCar = this.CarService.GetReplacementCar(CarInIncident);
Console.WriteLine("I got a replacement {0} from {1}", getReplacementCar.GetType().Name, this.CarService.GetType().Name);