Dependency Injection

CLASSDEFINITION.
	DATA(lo_cash_provider) = NEW cl_cash_provider( ).
ENDCLASS.

👆🏽 This here is a Dependency.

Design pattern in which, instead of creating the object ourselves in our code, we let some other entity create the object and "inject" into our class.

The dependency can be injected via:

  • constructor
  • setter method
  • parameter
  • backdoor

Constructor Injection

CLASSDEFINITION.
	
PUBLIC SECTION.
	METHODS constructor
		IMPORTING i_cash_provider TYPE REF TO if_cash_provider OPTIONAL.

PRIVATE SECTION.
	DATA m_cash_provider TYPE REF TO if_cash_provider.
ENDCLASS.


CLASSIMPLEMENTATION.
METHOD constructor.
	m_cash_provider = COND #( WHEN i_cash_provider IS BOUND
			   				  THEN i_cash_provider
							  ELSE NEW cl_cash_provider( ) ).
ENDMETHOD.
ENDCLASS.

Setter Injection

CLASSDEFINITION.
PUBLIC SECTION.
	METHODS set_cash_provider 
		IMPORTING i_cash_provider TYPE REF TO if_cash_provider.
PRIVATE SECTION.
	DATA m_cash_provider TYPE REF TO if_cash_provider.
ENDCLASS.

CLASSIMPLEMENTATION.
METHOD set_cash_provider.
	m_cash_provider = i_cash_provider.
ENDMETHOD.
ENDCLASS.

Parameter Injection

CLASSDEFINITION.
PUBLIC SECTION.
	METHODS get_amount_in_coins
		IMPORTING
			i_amount TYPE i
			i_cash_provider TYPE REF TO if_cash_provider OPTIONAL
		RETURNING VALUE(r_value) TYPE i.
PRIVATE SECTION.
	DATA m_cash_provider TYPE REF TO if_cash_provider.
ENDCLASS.

CLASSIMPLEMENTATION.
METHOD get_amount_in_coins.
	DATA(cash_provider) = CAST if_cash_provider(
							COND #( WHEN i_cash_provider IS BOUND
									THEN i_cash_provider
									ELSE NEW cl_cash_provider( ) ) ).
ENDMETHOD.
ENDCLASS

Backdoor Injection

Injection done using OOP#Friend Class.

CLASSDEFINITION.
PRIVATE SECTION.
	DATA m_cash_provider TYPE REF TO if_cash_provider.
ENDCLASS.
CLASS ltc_get_amount_in_coins DEFINITION DEFERRED.
CLASS cl_money_machine DEFINITION
LOCAL FRIENDS ltc_get_amount_in_coins.

CLASS ltc_get_amount_in_coins DEFINITION FOR TESTING.
ENDCLASS.

CLASS ltc_get_amount_in_coins IMPLEMENTATION.
METHOD setup.
	"given
	m_cut = NEW #( ).
	m_cut->m_cash_provider = NEW ltd_cash_provider( ).
ENDMETHOD.
ENDCLASS.

Field Injection

When a field in a class is directly injected into upon initialization (by a framework or library).

Not generally recommended though.

© 2025 All rights reservedBuilt with Flowershow Cloud

Built with LogoFlowershow Cloud