poodinis/example/qualifiers/app.d

56 lines
1.1 KiB
D
Raw Normal View History

2016-01-06 20:28:25 +01:00
/**
* Poodinis Dependency Injection Framework
2024-02-17 13:08:59 +01:00
* Copyright 2014-2024 Mike Bierlee
2016-01-06 20:28:25 +01:00
* This software is licensed under the terms of the MIT license.
* The full terms of the license can be found in the LICENSE file.
*/
import poodinis;
import std.stdio;
interface Engine {
2016-01-06 20:28:25 +01:00
public void engage();
}
class FuelEngine : Engine {
public void engage() {
2016-01-06 20:28:25 +01:00
writeln("VROOOOOOM!");
}
}
class ElectricEngine : Engine {
public void engage() {
2016-01-06 20:28:25 +01:00
writeln("hummmmmmmm....");
}
}
class HybridCar {
2016-01-06 20:28:25 +01:00
alias KilometersPerHour = int;
@Inject!FuelEngine private Engine fuelEngine;
2016-01-06 20:28:25 +01:00
@Inject!ElectricEngine private Engine electricEngine;
2016-01-06 20:28:25 +01:00
public void moveAtSpeed(KilometersPerHour speed) {
if (speed <= 45) {
2016-01-06 20:28:25 +01:00
electricEngine.engage();
} else {
2016-01-06 20:28:25 +01:00
fuelEngine.engage();
}
}
}
void main() {
auto dependencies = new shared DependencyContainer();
2016-01-06 20:28:25 +01:00
dependencies.register!HybridCar;
dependencies.register!(Engine, FuelEngine);
dependencies.register!(Engine, ElectricEngine);
auto car = dependencies.resolve!HybridCar;
car.moveAtSpeed(10); // Should print "hummmmmmmm...."
car.moveAtSpeed(50); // Should print "VROOOOOOM!"
}