aboutsummaryrefslogtreecommitdiff
path: root/extras/bazel_usage_example/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'extras/bazel_usage_example/main.cpp')
-rw-r--r--extras/bazel_usage_example/main.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/extras/bazel_usage_example/main.cpp b/extras/bazel_usage_example/main.cpp
new file mode 100644
index 0000000..4364993
--- /dev/null
+++ b/extras/bazel_usage_example/main.cpp
@@ -0,0 +1,55 @@
+
+#include <fruit/fruit.h>
+#include <iostream>
+
+using fruit::Component;
+using fruit::Injector;
+
+class Writer {
+public:
+ virtual void write(std::string s) = 0;
+};
+
+class StdoutWriter : public Writer {
+public:
+ // Like "StdoutWriter() = default;" but also marks this constructor as the
+ // one to use for injection.
+ INJECT(StdoutWriter()) = default;
+
+ virtual void write(std::string s) override {
+ std::cout << s;
+ }
+};
+
+class Greeter {
+public:
+ virtual void greet() = 0;
+};
+
+class GreeterImpl : public Greeter {
+private:
+ Writer* writer;
+
+public:
+ // Like "GreeterImpl(Writer* writer) {...}" but also marks this constructor
+ // as the one to use for injection.
+ INJECT(GreeterImpl(Writer* writer)) : writer(writer) {}
+
+ virtual void greet() override {
+ writer->write("Hello world!\n");
+ }
+};
+
+Component<Greeter> getGreeterComponent() {
+ return fruit::createComponent().bind<Writer, StdoutWriter>().bind<Greeter, GreeterImpl>();
+}
+
+int main() {
+
+ Injector<Greeter> injector(getGreeterComponent);
+ Greeter* greeter = injector.get<Greeter*>();
+
+ greeter->greet();
+
+ return 0;
+}