diff --git a/src/zcl_abapgit_factory.clas.abap b/src/zcl_abapgit_factory.clas.abap
index 466248785..be4fd03f0 100644
--- a/src/zcl_abapgit_factory.clas.abap
+++ b/src/zcl_abapgit_factory.clas.abap
@@ -1,30 +1,33 @@
CLASS zcl_abapgit_factory DEFINITION
PUBLIC
- CREATE PUBLIC .
+ CREATE PRIVATE
+ GLOBAL FRIENDS zcl_abapgit_injector.
PUBLIC SECTION.
- CLASS-DATA gi_tadir TYPE REF TO zif_abapgit_tadir .
+ CLASS-METHODS:
+ get_tadir
+ RETURNING
+ VALUE(ri_tadir) TYPE REF TO zif_abapgit_tadir.
- CLASS-METHODS get_tadir
- RETURNING
- VALUE(ri_tadir) TYPE REF TO zif_abapgit_tadir .
- PROTECTED SECTION.
PRIVATE SECTION.
+ CLASS-DATA:
+ mi_tadir TYPE REF TO zif_abapgit_tadir.
+
ENDCLASS.
-CLASS ZCL_ABAPGIT_FACTORY IMPLEMENTATION.
-
+CLASS zcl_abapgit_factory IMPLEMENTATION.
METHOD get_tadir.
- IF gi_tadir IS INITIAL.
- CREATE OBJECT gi_tadir TYPE zcl_abapgit_tadir.
+ IF mi_tadir IS INITIAL.
+ CREATE OBJECT mi_tadir TYPE zcl_abapgit_tadir.
ENDIF.
- ri_tadir = gi_tadir.
+ ri_tadir = mi_tadir.
ENDMETHOD.
+
ENDCLASS.
diff --git a/src/zcl_abapgit_factory.clas.xml b/src/zcl_abapgit_factory.clas.xml
index b92211da3..a8cd80d72 100644
--- a/src/zcl_abapgit_factory.clas.xml
+++ b/src/zcl_abapgit_factory.clas.xml
@@ -7,7 +7,6 @@
1
E
Factory
- 2
1
X
X
diff --git a/src/zcl_abapgit_injector.clas.abap b/src/zcl_abapgit_injector.clas.abap
new file mode 100644
index 000000000..7f3ba3ca8
--- /dev/null
+++ b/src/zcl_abapgit_injector.clas.abap
@@ -0,0 +1,24 @@
+CLASS zcl_abapgit_injector DEFINITION
+ PUBLIC
+ CREATE PRIVATE
+ FOR TESTING .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS set_tadir
+ IMPORTING
+ !ii_tadir TYPE REF TO zif_abapgit_tadir .
+
+ENDCLASS.
+
+
+
+CLASS zcl_abapgit_injector IMPLEMENTATION.
+
+ METHOD set_tadir.
+
+ zcl_abapgit_factory=>mi_tadir = ii_tadir.
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/zcl_abapgit_injector.clas.testclasses.abap b/src/zcl_abapgit_injector.clas.testclasses.abap
new file mode 100644
index 000000000..28bb3a47d
--- /dev/null
+++ b/src/zcl_abapgit_injector.clas.testclasses.abap
@@ -0,0 +1,93 @@
+*"* use this source file for your ABAP unit test classes
+
+CLASS ltd_abapgit_tadir_mock DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES: zif_abapgit_tadir.
+
+ENDCLASS.
+
+CLASS no_dependency_injection DEFINITION FOR TESTING
+ RISK LEVEL HARMLESS
+ DURATION SHORT.
+
+ PRIVATE SECTION.
+ METHODS:
+ no_injection FOR TESTING RAISING cx_static_check.
+
+ENDCLASS.
+
+CLASS simple_dependency_injection DEFINITION FOR TESTING
+ RISK LEVEL HARMLESS
+ DURATION SHORT.
+
+ PRIVATE SECTION.
+ METHODS:
+ setup,
+ simple_injection FOR TESTING RAISING cx_static_check.
+
+ENDCLASS.
+
+CLASS ltd_abapgit_tadir_mock IMPLEMENTATION.
+
+ METHOD zif_abapgit_tadir~get_object_package.
+
+ ENDMETHOD.
+
+ METHOD zif_abapgit_tadir~read.
+
+ ENDMETHOD.
+
+ METHOD zif_abapgit_tadir~read_single.
+
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS no_dependency_injection IMPLEMENTATION.
+
+ METHOD no_injection.
+
+ DATA: lo_tadir TYPE REF TO zif_abapgit_tadir,
+ lo_class_descr TYPE REF TO cl_abap_classdescr.
+
+ lo_tadir = zcl_abapgit_factory=>get_tadir( ).
+
+ lo_class_descr ?= cl_abap_classdescr=>describe_by_object_ref( lo_tadir ).
+
+ cl_abap_unit_assert=>assert_equals(
+ exp = '\CLASS=ZCL_ABAPGIT_TADIR'
+ act = lo_class_descr->absolute_name ).
+
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS simple_dependency_injection IMPLEMENTATION.
+
+ METHOD setup.
+
+ DATA: lo_tadir_mock TYPE REF TO ltd_abapgit_tadir_mock.
+
+ CREATE OBJECT lo_tadir_mock.
+
+ zcl_abapgit_injector=>set_tadir( lo_tadir_mock ).
+
+ ENDMETHOD.
+
+ METHOD simple_injection.
+
+ DATA: lo_tadir TYPE REF TO zif_abapgit_tadir,
+ lo_class_descr TYPE REF TO cl_abap_classdescr.
+
+ lo_tadir = zcl_abapgit_factory=>get_tadir( ).
+
+ lo_class_descr ?= cl_abap_classdescr=>describe_by_object_ref( lo_tadir ).
+
+ cl_abap_unit_assert=>assert_equals(
+ exp = '\CLASS-POOL=ZCL_ABAPGIT_INJECTOR\CLASS=LTD_ABAPGIT_TADIR_MOCK'
+ act = lo_class_descr->absolute_name ).
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/zcl_abapgit_injector.clas.xml b/src/zcl_abapgit_injector.clas.xml
new file mode 100644
index 000000000..8e632aa21
--- /dev/null
+++ b/src/zcl_abapgit_injector.clas.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ ZCL_ABAPGIT_INJECTOR
+ 1
+ E
+ abapGit injector
+ 05
+ 1
+ X
+ X
+ X
+ X
+
+
+
+
diff --git a/src/zcl_abapgit_tadir.clas.abap b/src/zcl_abapgit_tadir.clas.abap
index 0bc91e958..69ddd1218 100644
--- a/src/zcl_abapgit_tadir.clas.abap
+++ b/src/zcl_abapgit_tadir.clas.abap
@@ -1,13 +1,12 @@
CLASS zcl_abapgit_tadir DEFINITION
PUBLIC
FINAL
- CREATE PUBLIC
-
+ CREATE PRIVATE
GLOBAL FRIENDS zcl_abapgit_factory .
PUBLIC SECTION.
-
INTERFACES zif_abapgit_tadir .
+
PRIVATE SECTION.
METHODS exists
@@ -38,7 +37,7 @@ ENDCLASS.
-CLASS ZCL_ABAPGIT_TADIR IMPLEMENTATION.
+CLASS zcl_abapgit_tadir IMPLEMENTATION.
METHOD build.
diff --git a/src/zcl_abapgit_tadir.clas.xml b/src/zcl_abapgit_tadir.clas.xml
index 8c7c92231..e556c16a2 100644
--- a/src/zcl_abapgit_tadir.clas.xml
+++ b/src/zcl_abapgit_tadir.clas.xml
@@ -7,7 +7,6 @@
1
E
TADIR access
- 2
1
X
X