Dependency injection
ಸಾಫ್ಟ್ವೇರ್ ಎಂಜಿನಿಯರಿಂಗ್ನಲ್ಲಿ, ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಎನ್ನುವುದು ಒಂದು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ತಂತ್ರವಾಗಿದ್ದು, ಇದರಲ್ಲಿ ಒಂದು ವಸ್ತು ಅಥವಾ ಕಾರ್ಯವು ಇತರ ವಸ್ತುಗಳು ಅಥವಾ ಕಾರ್ಯಗಳನ್ನು ಆಂತರಿಕವಾಗಿ ರಚಿಸುವುದಕ್ಕಿಂತ ಹೆಚ್ಚಾಗಿ ಪಡೆಯುತ್ತದೆ. ಅವಲಂಬನೆ ಇಂಜೆಕ್ಷನ್ ವಸ್ತುಗಳನ್ನು ನಿರ್ಮಿಸುವ ಮತ್ತು ಅವುಗಳನ್ನು ಬಳಸುವ ಕಾಳಜಿಯನ್ನು ಪ್ರತ್ಯೇಕಿಸುವ ಗುರಿಯನ್ನು ಹೊಂದಿದೆ, ಇದು ಸಡಿಲವಾಗಿ ಜೋಡಿಸಲಾದ ಕಾರ್ಯಕ್ರಮಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ನಿರ್ದಿಷ್ಟ ಸೇವೆಯನ್ನು ಬಳಸಲು ಬಯಸುವ ವಸ್ತು ಅಥವಾ ಕಾರ್ಯವು ಆ ಸೇವೆಗಳನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸಬೇಕು ಎಂದು ತಿಳಿದಿರಬಾರದು ಎಂದು ಮಾದರಿಯು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಬದಲಾಗಿ, ಸ್ವೀಕರಿಸುವ 'ಕ್ಲೈಂಟ್' (ವಸ್ತು ಅಥವಾ ಕಾರ್ಯ) ಗೆ ಅದರ ಅವಲಂಬನೆಯನ್ನು ಬಾಹ್ಯ ಸಂಕೇತದಿಂದ (ಒಂದು 'ಇಂಜೆಕ್ಟರ್') ಒದಗಿಸಲಾಗುತ್ತದೆ, ಅದು ಅವನಿಗೆ ತಿಳಿದಿಲ್ಲ. ಅವಲಂಬನೆ ಚುಚ್ಚುಮದ್ದು ಸೂಚ್ಯ ಅವಲಂಬನೆಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಮಾಡುತ್ತದೆ ಮತ್ತು ಈ ಕೆಳಗಿನ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆಃ ಒಂದು ವರ್ಗವು ತಾನು ಅವಲಂಬಿಸಿರುವ ವಸ್ತುಗಳ ಸೃಷ್ಟಿಯಿಂದ ಹೇಗೆ ಸ್ವತಂತ್ರವಾಗಿರಲು ಸಾಧ್ಯ? ಒಂದು ಅಪ್ಲಿಕೇಶನ್ ಮತ್ತು ಅದು ಬಳಸುವ ವಸ್ತುಗಳು ವಿಭಿನ್ನ ಸಂರಚನೆಗಳನ್ನು ಹೇಗೆ ಬೆಂಬಲಿಸುತ್ತವೆ? ಕೋಡ್ ಅನ್ನು ನೇರವಾಗಿ ಸಂಪಾದಿಸದೆ ಅದರ ನಡವಳಿಕೆಯನ್ನು ಹೇಗೆ ಬದಲಾಯಿಸಬಹುದು? ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಅನ್ನು ಹೆಚ್ಚಾಗಿ ಕೋಡ್ ಅನ್ನು ಡಿಪೆಂಡೆನ್ಸಿ ಇನ್ವರ್ಷನ್ ತತ್ವಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಇರಿಸಿಕೊಳ್ಳಲು ಬಳಸಲಾಗುತ್ತದೆ. ಅವಲಂಬನೆ ಇಂಜೆಕ್ಷನ್ ಅನ್ನು ಬಳಸುವ ಸ್ಥಿರವಾಗಿ-ಟೈಪ್ ಮಾಡಲಾದ ಭಾಷೆಗಳಲ್ಲಿ ಕ್ಲೈಂಟ್ ತಮ್ಮ ಕಾಂಕ್ರೀಟ್ ಅನುಷ್ಠಾನಗಳಿಗಿಂತ ಹೆಚ್ಚಾಗಿ ತಾನು ಬಳಸುವ ಸೇವೆಗಳ ಇಂಟರ್ಫೇಸ್ಗಳನ್ನು ಮಾತ್ರ ಘೋಷಿಸಬೇಕಾಗುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಮರುಸಂಕಲನೆ ಮಾಡದೆಯೇ ರನ್ಟೈಮ್ನಲ್ಲಿ ಯಾವ ಸೇವೆಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಬದಲಾಯಿಸುವುದು ಸುಲಭವಾಗುತ್ತದೆ. ಅಪ್ಲಿಕೇಶನ್ ಫ್ರೇಮ್ವರ್ಕ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಅನ್ನು ಇನ್ವರ್ಷನ್ ಆಫ್ ಕಂಟ್ರೋಲ್ನೊಂದಿಗೆ ಸಂಯೋಜಿಸುತ್ತವೆ. ನಿಯಂತ್ರಣದ ವಿಲೋಮದ ಅಡಿಯಲ್ಲಿ, ಚೌಕಟ್ಟು ಮೊದಲು ಒಂದು ವಸ್ತುವನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ (ನಿಯಂತ್ರಕದಂತಹ), ನಂತರ ಅದಕ್ಕೆ ನಿಯಂತ್ರಣದ ಹರಿವನ್ನು ರವಾನಿಸುತ್ತದೆ. ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ನೊಂದಿಗೆ, ಫ್ರೇಮ್ವರ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ಆಬ್ಜೆಕ್ಟ್ ಘೋಷಿಸಿದ ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು (ಸಾಮಾನ್ಯವಾಗಿ ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ವಿಧಾನದ ನಿಯತಾಂಕಗಳಲ್ಲಿ) ತ್ವರಿತಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಡಿಪೆಂಡೆನ್ಸಿಗಳನ್ನು ಆಬ್ಜೆಕ್ಟ್ಗೆ ರವಾನಿಸುತ್ತದೆ. ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ "ಡಿಪೆಂಡೆನ್ಸಿಗಳ ಅನುಷ್ಠಾನಗಳ ಮೇಲೆ ಇನ್ವರ್ಟಿಂಗ್ ಕಂಟ್ರೋಲ್" ಎಂಬ ಕಲ್ಪನೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ, ಅದಕ್ಕಾಗಿಯೇ ಕೆಲವು ಜಾವಾ ಚೌಕಟ್ಟುಗಳು ಸಾಮಾನ್ಯವಾಗಿ "ಇನ್ವರ್ಷನ್ ಆಫ್ ಕಂಟ್ರೋಲ್" ಎಂಬ ಪರಿಕಲ್ಪನೆಯನ್ನು ಹೆಸರಿಸುತ್ತವೆ (ನಿಯಂತ್ರಣ ಹರಿವಿನ ಇನ್ವರ್ಷನ್ನೊಂದಿಗೆ ಗೊಂದಲಕ್ಕೀಡಾಗಬಾರದು). ಪಾತ್ರಗಳ ಅವಲಂಬನೆ ಇಂಜೆಕ್ಷನ್ ನಾಲ್ಕು ಪಾತ್ರಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆಃ ಸೇವೆಗಳು, ಕ್ಲೈಂಟ್ಗಳು, ಇಂಟರ್ಫೇಸ್ಗಳು ಮತ್ತು ಇಂಜೆಕ್ಟರ್ಗಳು. ಸೇವೆಗಳು ಮತ್ತು ಕ್ಲೈಂಟ್ಗಳು ಒಂದು ಸೇವೆಯು ಉಪಯುಕ್ತ ಕಾರ್ಯವನ್ನು ಒಳಗೊಂಡಿರುವ ಯಾವುದೇ ವರ್ಗವಾಗಿದೆ. ಪ್ರತಿಯಾಗಿ, ಕ್ಲೈಂಟ್ ಎಂದರೆ ಸೇವೆಗಳನ್ನು ಬಳಸುವ ಯಾವುದೇ ವರ್ಗ. ಗ್ರಾಹಕನಿಗೆ ಅಗತ್ಯವಿರುವ ಸೇವೆಗಳು ಗ್ರಾಹಕನ ಅವಲಂಬನೆಗಳಾಗಿವೆ. ಯಾವುದೇ ವಸ್ತುವು ಸೇವೆಯಾಗಿರಬಹುದು ಅಥವಾ ಗ್ರಾಹಕವಾಗಿರಬಹುದು; ಹೆಸರುಗಳು ಚುಚ್ಚುಮದ್ದಿನಲ್ಲಿನ ವಸ್ತುಗಳ ಪಾತ್ರಕ್ಕೆ ಮಾತ್ರ ಸಂಬಂಧಿಸಿವೆ. ಒಂದೇ ವಸ್ತುವು ಗ್ರಾಹಕ (ಇದು ಚುಚ್ಚುಮದ್ದಿನ ಸೇವೆಗಳನ್ನು ಬಳಸುತ್ತದೆ) ಮತ್ತು ಸೇವೆ (ಇದನ್ನು ಇತರ ವಸ್ತುಗಳಿಗೆ ಚುಚ್ಚಲಾಗುತ್ತದೆ) ಎರಡೂ ಆಗಿರಬಹುದು. ಚುಚ್ಚುಮದ್ದಿನ ನಂತರ, ಸೇವೆಯನ್ನು ಗ್ರಾಹಕನ ರಾಜ್ಯದ ಭಾಗವಾಗಿಸಿ, ಬಳಕೆಗೆ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡಲಾಗುತ್ತದೆ. ಇಂಟರ್ಫೇಸ್ ಕ್ಲೈಂಟ್ಗಳಿಗೆ ಅವರ ಅವಲಂಬನೆಗಳನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ ಎಂದು ತಿಳಿದಿರಬಾರದು, ಅವರ ಹೆಸರುಗಳು ಮತ್ತು ಎಪಿಐ ಮಾತ್ರ. ಉದಾಹರಣೆಗೆ, ಇಮೇಲ್ಗಳನ್ನು ಹಿಂಪಡೆಯುವ ಸೇವೆಯು, ತೆರೆಮರೆಯಲ್ಲಿ ಐಎಂಎಪಿ ಅಥವಾ ಪಿಒಪಿ3 ಶಿಷ್ಟಾಚಾರಗಳನ್ನು ಬಳಸಬಹುದು, ಆದರೆ ಈ ವಿವರವು ಕೇವಲ ಇಮೇಲ್ ಅನ್ನು ಹಿಂಪಡೆಯಲು ಬಯಸುವ ಕರೆ ಕೋಡ್ಗೆ ಅಪ್ರಸ್ತುತವಾಗಿದೆ. ಅನುಷ್ಠಾನದ ವಿವರಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸುವ ಮೂಲಕ, ಗ್ರಾಹಕರು ತಮ್ಮ ಅವಲಂಬನೆಗಳನ್ನು ಬದಲಾಯಿಸುವ ಅಗತ್ಯವಿಲ್ಲ. ಇಂಜೆಕ್ಟರ್ಗಳು ಇಂಜೆಕ್ಟರ್, ಕೆಲವೊಮ್ಮೆ ಜೋಡಣೆದಾರ, ಧಾರಕ, ಪೂರೈಕೆದಾರ ಅಥವಾ ಕಾರ್ಖಾನೆ ಎಂದೂ ಕರೆಯಲ್ಪಡುತ್ತದೆ, ಗ್ರಾಹಕನಿಗೆ ಸೇವೆಗಳನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ. ಇಂಜೆಕ್ಟರ್ಗಳ ಪಾತ್ರವು ಸಂಕೀರ್ಣ ಆಬ್ಜೆಕ್ಟ್ ಗ್ರಾಫ್ಗಳನ್ನು ನಿರ್ಮಿಸುವುದು ಮತ್ತು ಸಂಪರ್ಕಿಸುವುದು, ಅಲ್ಲಿ ವಸ್ತುಗಳು ಕ್ಲೈಂಟ್ಗಳು ಮತ್ತು ಸೇವೆಗಳೆರಡೂ ಆಗಿರಬಹುದು. ಇಂಜೆಕ್ಟರ್ ಸ್ವತಃ ಒಟ್ಟಿಗೆ ಕೆಲಸ ಮಾಡುವ ಅನೇಕ ವಸ್ತುಗಳಾಗಿರಬಹುದು, ಆದರೆ ಕ್ಲೈಂಟ್ ಆಗಿರಬಾರದು, ಏಕೆಂದರೆ ಇದು ವೃತ್ತಾಕಾರದ ಅವಲಂಬನೆಯನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ಅವಲಂಬನೆ ಚುಚ್ಚುಮದ್ದು ವಸ್ತುಗಳನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಹೇಗೆ ಬಳಸಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆಯಾದ್ದರಿಂದ, ಇದು ಹೆಚ್ಚಿನ ವಸ್ತು-ಆಧಾರಿತ ಭಾಷೆಗಳಲ್ಲಿ ಕಂಡುಬರುವ ಹೊಸ ಕೀವರ್ಡ್ನ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಫ್ರೇಮ್ವರ್ಕ್ ಸೇವೆಗಳನ್ನು ರಚಿಸುವುದನ್ನು ನಿಭಾಯಿಸುತ್ತದೆಯಾದ್ದರಿಂದ, ಪ್ರೋಗ್ರಾಮರ್ ಪ್ರೋಗ್ರಾಂನ ಡೊಮೇನ್ನಲ್ಲಿರುವ ಘಟಕಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುವ ಮೌಲ್ಯದ ವಸ್ತುಗಳನ್ನು ಮಾತ್ರ ನೇರವಾಗಿ ನಿರ್ಮಿಸಲು ಒಲವು ತೋರುತ್ತಾನೆ (ಉದಾಹರಣೆಗೆ ವ್ಯಾಪಾರ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿರುವ ಉದ್ಯೋಗಿ ವಸ್ತು ಅಥವಾ ಶಾಪಿಂಗ್ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿರುವ ಆರ್ಡರ್ ವಸ್ತು). ಸಾದೃಶ್ಯವು ಒಂದು ಸಾದೃಶ್ಯವಾಗಿ, ಕಾರುಗಳನ್ನು ಜನರನ್ನು ಒಂದು ಸ್ಥಳದಿಂದ ಮತ್ತೊಂದು ಸ್ಥಳಕ್ಕೆ ಸಾಗಿಸುವ ಉಪಯುಕ್ತ ಕಾರ್ಯವನ್ನು ನಿರ್ವಹಿಸುವ ಸೇವೆಗಳೆಂದು ಪರಿಗಣಿಸಬಹುದು. ಕಾರು ಎಂಜಿನ್ಗಳಿಗೆ ಅನಿಲ, ಡೀಸೆಲ್ ಅಥವಾ ವಿದ್ಯುತ್ ಬೇಕಾಗಬಹುದು, ಆದರೆ ಈ ವಿವರವು ಗ್ರಾಹಕನಿಗೆ-ಚಾಲಕನಿಗೆ-ಮುಖ್ಯವಲ್ಲ, ಅವರು ಅವುಗಳನ್ನು ತಮ್ಮ ಗಮ್ಯಸ್ಥಾನಕ್ಕೆ ತಲುಪಿಸಬಹುದೇ ಎಂದು ಮಾತ್ರ ಕಾಳಜಿ ವಹಿಸುತ್ತಾರೆ. ಕಾರುಗಳು ತಮ್ಮ ಪೆಡಲ್ಗಳು, ಸ್ಟೀರಿಂಗ್ ಚಕ್ರಗಳು ಮತ್ತು ಇತರ ನಿಯಂತ್ರಣಗಳ ಮೂಲಕ ಏಕರೂಪದ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಪ್ರಸ್ತುತಪಡಿಸುತ್ತವೆ. ಹೀಗಾಗಿ, ಫ್ಯಾಕ್ಟರಿ ಲೈನ್ನಲ್ಲಿ ಅವರು ಯಾವ ಎಂಜಿನ್ನೊಂದಿಗೆ 'ಇಂಜೆಕ್ಟ್' ಮಾಡಿದರು ಎಂಬುದು ಅಪ್ರಸ್ತುತವಾಗುತ್ತದೆ ಮತ್ತು ಚಾಲಕರು ಅಗತ್ಯವಿರುವಂತೆ ಯಾವುದೇ ರೀತಿಯ ಕಾರಿನ ನಡುವೆ ಬದಲಾಯಿಸಬಹುದು. ಅನುಕೂಲಗಳು ಮತ್ತು ಅನಾನುಕೂಲಗಳು ಅವಲಂಬನೆ ಚುಚ್ಚುಮದ್ದಿನ ಒಂದು ಮೂಲಭೂತ ಪ್ರಯೋಜನವೆಂದರೆ ವರ್ಗಗಳು ಮತ್ತು ಅವುಗಳ ಅವಲಂಬನೆಗಳ ನಡುವಿನ ಕಡಿಮೆ ಜೋಡಣೆ. ಅದರ ಅವಲಂಬನೆಗಳನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ ಎಂಬುದರ ಬಗ್ಗೆ ಕ್ಲೈಂಟ್ನ ಜ್ಞಾನವನ್ನು ತೆಗೆದುಹಾಕುವ ಮೂಲಕ, ಪ್ರೋಗ್ರಾಂಗಳು ಹೆಚ್ಚು ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದವು, ಪರೀಕ್ಷಿಸಬಹುದಾದವು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದಾದವು. ಇದು ಹೆಚ್ಚಿದ ನಮ್ಯತೆಗೆ ಕಾರಣವಾಗುತ್ತದೆಃ ಕ್ಲೈಂಟ್ ನಿರೀಕ್ಷಿಸುವ ಆಂತರಿಕ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಬೆಂಬಲಿಸುವ ಯಾವುದಾದರೊದರ ಮೇಲೆ ಕ್ಲೈಂಟ್ ಕಾರ್ಯನಿರ್ವಹಿಸಬಹುದು. ಹೆಚ್ಚು ಸಾಮಾನ್ಯವಾಗಿ, ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಬಾಯ್ಲರ್ ಪ್ಲೇಟ್ ಕೋಡ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ, ಏಕೆಂದರೆ ಎಲ್ಲಾ ಡಿಪೆಂಡೆನ್ಸಿ ರಚನೆಯನ್ನು ಏಕ ಘಟಕದಿಂದ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ. ಅಂತಿಮವಾಗಿ, ಅವಲಂಬನೆ ಚುಚ್ಚುಮದ್ದು ಏಕಕಾಲೀನ ಬೆಳವಣಿಗೆಯನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಇಬ್ಬರು ಅಭಿವರ್ಧಕರು ಪರಸ್ಪರ ಬಳಸುವ ವರ್ಗಗಳನ್ನು ಸ್ವತಂತ್ರವಾಗಿ ಅಭಿವೃದ್ಧಿಪಡಿಸಬಹುದು, ಆದರೆ ವರ್ಗಗಳು ಸಂವಹನ ನಡೆಸುವ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಮಾತ್ರ ತಿಳಿದುಕೊಳ್ಳಬೇಕಾಗುತ್ತದೆ. ಮೂಲ ಉತ್ಪನ್ನದ ಅಭಿವರ್ಧಕರೊಂದಿಗೆ ಎಂದಿಗೂ ಮಾತನಾಡದ ಮೂರನೇ ವ್ಯಕ್ತಿಗಳು ಪ್ಲಗಿನ್ಗಳನ್ನು ಹೆಚ್ಚಾಗಿ ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತಾರೆ. ಅವಲಂಬನೆಯ ಚುಚ್ಚುಮದ್ದಿನ ಅನೇಕ ಪ್ರಯೋಜನಗಳು ಘಟಕ-ಪರೀಕ್ಷೆಗೆ ವಿಶೇಷವಾಗಿ ಪ್ರಸ್ತುತವಾಗಿವೆ. ಉದಾಹರಣೆಗೆ, ವ್ಯವಸ್ಥೆಯ ಸಂರಚನೆಯ ವಿವರಗಳನ್ನು ಸಂರಚನೆಯ ಕಡತಗಳಾಗಿ ಬಾಹ್ಯಗೊಳಿಸಲು ಅವಲಂಬನೆಯ ಚುಚ್ಚುಮದ್ದನ್ನು ಬಳಸಬಹುದು, ಇದು ಮರುಸಂಯೋಜನೆಯಿಲ್ಲದೆ ವ್ಯವಸ್ಥೆಯನ್ನು ಮರುಸಂಯೋಜಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಘಟಕಗಳ ವಿಭಿನ್ನ ಅನುಷ್ಠಾನಗಳ ಅಗತ್ಯವಿರುವ ವಿವಿಧ ಸಂದರ್ಭಗಳಿಗೆ ಪ್ರತ್ಯೇಕ ಸಂರಚನೆಗಳನ್ನು ಬರೆಯಬಹುದು. ಅಂತೆಯೇ, ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ಗೆ ಕೋಡ್ ನಡವಳಿಕೆಯಲ್ಲಿ ಯಾವುದೇ ಬದಲಾವಣೆಯ ಅಗತ್ಯವಿರುವುದಿಲ್ಲವಾದ್ದರಿಂದ, ಇದನ್ನು ಲೆಗಸಿ ಕೋಡ್ಗೆ ರಿಫ್ಯಾಕ್ಟರಿಂಗ್ ಆಗಿ ಅನ್ವಯಿಸಬಹುದು. ಇದು ಗ್ರಾಹಕರನ್ನು ಹೆಚ್ಚು ಸ್ವತಂತ್ರವಾಗಿಸುತ್ತದೆ ಮತ್ತು ಪರೀಕ್ಷೆಯಲ್ಲಿಲ್ಲದ ಇತರ ವಸ್ತುಗಳನ್ನು ಅನುಕರಿಸುವ ಸ್ಟಬ್ಗಳು ಅಥವಾ ಅಣಕು ವಸ್ತುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರತ್ಯೇಕವಾಗಿ ಪರೀಕ್ಷಿಸಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ. ಪರೀಕ್ಷೆಯ ಈ ಸುಲಭತೆಯು ಸಾಮಾನ್ಯವಾಗಿ ಅವಲಂಬನೆ ಚುಚ್ಚುಮದ್ದನ್ನು ಬಳಸುವಾಗ ಕಂಡುಬರುವ ಮೊದಲ ಪ್ರಯೋಜನವಾಗಿದೆ. ಅನನುಕೂಲಗಳು ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ನ ವಿಮರ್ಶಕರು ಇದನ್ನು ಹೀಗೆ ವಾದಿಸುತ್ತಾರೆಃ ಸಂರಚನೆಯ ವಿವರಗಳನ್ನು ಬೇಡುವ ಕ್ಲೈಂಟ್ಗಳನ್ನು ರಚಿಸುತ್ತದೆ, ಇದು ಸ್ಪಷ್ಟ ಡೀಫಾಲ್ಟ್ಗಳು ಲಭ್ಯವಿರುವಾಗ ಕಷ್ಟವಾಗಬಹುದು. ಕೋಡ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಕಷ್ಟವಾಗುತ್ತದೆ ಏಕೆಂದರೆ ಇದು ನಡವಳಿಕೆಯನ್ನು ನಿರ್ಮಾಣದಿಂದ ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆ. ಇದನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ರಿಫ್ಲೆಕ್ಷನ್ ಅಥವಾ ಡೈನಾಮಿಕ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ನೊಂದಿಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ, ಇದು ಐಡಿಇ ಆಟೊಮೇಷನ್ಗೆ ಅಡ್ಡಿಯಾಗುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ ಹೆಚ್ಚಿನ ಮುಂಗಡ ಅಭಿವೃದ್ಧಿ ಪ್ರಯತ್ನದ ಅಗತ್ಯವಿರುತ್ತದೆ. ಚೌಕಟ್ಟಿನ ಮೇಲೆ ಅವಲಂಬನೆಯನ್ನು ಉತ್ತೇಜಿಸುತ್ತದೆ. ಗ್ರಾಹಕನು ಚುಚ್ಚುಮದ್ದಿನ ಸೇವೆಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಮೂರು ಪ್ರಮುಖ ಮಾರ್ಗಗಳಿವೆಃ ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಇಂಜೆಕ್ಷನ್, ಇದರಲ್ಲಿ ಕ್ಲೈಂಟ್ನ ಕ್ಲಾಸ್ ಕನ್ಸ್ಟ್ರಕ್ಟರ್ನ ಮೂಲಕ ಅವಲಂಬನೆಯನ್ನು ಒದಗಿಸಲಾಗುತ್ತದೆ. ಸೆಟ್ಟರ್ ಇಂಜೆಕ್ಷನ್, ಅಲ್ಲಿ ಗ್ರಾಹಕನು ಅವಲಂಬನೆಯನ್ನು ಸ್ವೀಕರಿಸುವ ಸೆಟ್ಟರ್ ವಿಧಾನವನ್ನು ಬಹಿರಂಗಪಡಿಸುತ್ತಾನೆ. ಇಂಟರ್ಫೇಸ್ ಇಂಜೆಕ್ಷನ್, ಅಲ್ಲಿ ಅವಲಂಬನೆಯ ಇಂಟರ್ಫೇಸ್ ಇಂಜೆಕ್ಟರ್ ವಿಧಾನವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಅದು ಅವಲಂಬನೆಯನ್ನು ಯಾವುದೇ ಕ್ಲೈಂಟ್ಗೆ ರವಾನಿಸುತ್ತದೆ. ಕೆಲವು ಚೌಕಟ್ಟುಗಳಲ್ಲಿ, ಗ್ರಾಹಕರು ಅವಲಂಬನೆ ಚುಚ್ಚುಮದ್ದನ್ನು ಸಕ್ರಿಯವಾಗಿ ಸ್ವೀಕರಿಸುವ ಅಗತ್ಯವಿಲ್ಲ. ಉದಾಹರಣೆಗೆ, ಜಾವಾದಲ್ಲಿ, ಪ್ರತಿಬಿಂಬವು ಖಾಸಗಿ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಪರೀಕ್ಷಿಸುವಾಗ ಮತ್ತು ಸೇವೆಗಳನ್ನು ನೇರವಾಗಿ ಸೇರಿಸುವಾಗ ಸಾರ್ವಜನಿಕಗೊಳಿಸಬಹುದು. ಈ ಕೆಳಗಿನ ಜಾವಾ ಉದಾಹರಣೆಯಲ್ಲಿ, ಕ್ಲೈಂಟ್ ವರ್ಗವು ಕನ್ಸ್ಟ್ರಕ್ಟರ್ನಲ್ಲಿ ಆರಂಭಿಸಲಾದ ಸರ್ವೀಸ್ ಮೆಂಬರ್ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಕ್ಲೈಂಟ್ ನೇರವಾಗಿ ತಾನು ಬಳಸುವ ಸೇವೆಯನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ ಮತ್ತು ನಿಯಂತ್ರಿಸುತ್ತದೆ, ಇದು ಹಾರ್ಡ್-ಕೋಡೆಡ್ ಅವಲಂಬನೆಯನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ಸಾರ್ವಜನಿಕ ವರ್ಗದ ಕ್ಲೈಂಟ್ {ಖಾಸಗಿ ಸೇವಾ ಸೇವೆ; ಕ್ಲೈಂಟ್ () {// ಅವಲಂಬನೆಯು ಹಾರ್ಡ್-ಕೋಡೆಡ್ ಆಗಿದೆ. this.service = ಹೊಸ ಎಕ್ಸಾಂಪಲ್ ಸರ್ವಿಸ್ ();} ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಇಂಜೆಕ್ಷನ್ ಒಂದು ವರ್ಗವು ತನ್ನ ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಮೂಲಕ ತನ್ನ ಅವಲಂಬನೆಗಳನ್ನು ವಿನಂತಿಸುವುದು ಅವಲಂಬನೆಯ ಇಂಜೆಕ್ಷನ್ನ ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ರೂಪವಾಗಿದೆ. ಇದು ಗ್ರಾಹಕನು ಯಾವಾಗಲೂ ಮಾನ್ಯ ಸ್ಥಿತಿಯಲ್ಲಿರುವುದನ್ನು ಖಾತ್ರಿಪಡಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಅದರ ಅಗತ್ಯ ಅವಲಂಬನೆಗಳಿಲ್ಲದೆ ಅದನ್ನು ತ್ವರಿತಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಸಾರ್ವಜನಿಕ ವರ್ಗದ ಕ್ಲೈಂಟ್ {ಖಾಸಗಿ ಸೇವಾ ಸೇವೆ;// ಅವಲಂಬನೆಯನ್ನು ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಮೂಲಕ ಚುಚ್ಚಲಾಗುತ್ತದೆ. ಕ್ಲೈಂಟ್ (ಸೇವಾ ಸೇವೆ) {(ಸೇವೆ = = ಶೂನ್ಯ) {ಹೊಸ ಕಾನೂನುಬಾಹಿರ ವಾದವನ್ನು ಎಸೆಯಿರಿ ಎಕ್ಸೆಪ್ಶನ್ ("ಸೇವೆಯು ಶೂನ್ಯವಾಗಿರಬಾರದು");} this.service = ಸೇವೆ;} ಸೆಟ್ಟರ್ ಇಂಜೆಕ್ಷನ್ ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಬದಲಿಗೆ ಸೆಟ್ಟರ್ ವಿಧಾನದ ಮೂಲಕ ಅವಲಂಬನೆಗಳನ್ನು ಸ್ವೀಕರಿಸುವ ಮೂಲಕ, ಗ್ರಾಹಕರು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ತಮ್ಮ ಅವಲಂಬನೆಗಳನ್ನು ಕುಶಲತೆಯಿಂದ ನಿರ್ವಹಿಸಲು ಇಂಜೆಕ್ಟರ್ಗಳಿಗೆ ಅವಕಾಶ ನೀಡಬಹುದು. ಇದು ನಮ್ಯತೆಯನ್ನು ನೀಡುತ್ತದೆ, ಆದರೆ ಕ್ಲೈಂಟ್ ಅನ್ನು ಬಳಸುವ ಮೊದಲು ಎಲ್ಲಾ ಅವಲಂಬನೆಗಳು ಚುಚ್ಚುಮದ್ದು ಮತ್ತು ಮಾನ್ಯವಾಗಿವೆಯೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಕಷ್ಟವಾಗುತ್ತದೆ. ಸಾರ್ವಜನಿಕ ವರ್ಗದ ಕ್ಲೈಂಟ್ {ಖಾಸಗಿ ಸೇವಾ ಸೇವೆ;// ಅವಲಂಬನೆಯನ್ನು ಸೆಟ್ಟರ್ ವಿಧಾನದ ಮೂಲಕ ಚುಚ್ಚಲಾಗುತ್ತದೆ. ಸಾರ್ವಜನಿಕ ಶೂನ್ಯ ಸೆಟ್ ಸರ್ವಿಸ್ (ಸೇವಾ ಸೇವೆ) {(ಸೇವೆ = = ಶೂನ್ಯ) {ಹೊಸ ಕಾನೂನುಬಾಹಿರ ವಾದವನ್ನು ಎಸೆಯಿರಿ ಎಕ್ಸೆಪ್ಶನ್ ("ಸೇವೆಯು ಶೂನ್ಯವಾಗಿರಬಾರದು");} this.service = ಸೇವೆ;} ಇಂಟರ್ಫೇಸ್ ಇಂಜೆಕ್ಷನ್ ಇಂಟರ್ಫೇಸ್ ಇಂಜೆಕ್ಷನ್ನೊಂದಿಗೆ, ಅವಲಂಬನೆಗಳು ತಮ್ಮ ಗ್ರಾಹಕರ ಬಗ್ಗೆ ಸಂಪೂರ್ಣವಾಗಿ ತಿಳಿದಿರುವುದಿಲ್ಲ, ಆದರೂ ಇನ್ನೂ ಹೊಸ ಗ್ರಾಹಕರಿಗೆ ಉಲ್ಲೇಖಗಳನ್ನು ಕಳುಹಿಸುತ್ತವೆ ಮತ್ತು ಸ್ವೀಕರಿಸುತ್ತವೆ. ಈ ರೀತಿಯಾಗಿ, ಅವಲಂಬನೆಗಳು ಇಂಜೆಕ್ಟರ್ಗಳಾಗುತ್ತವೆ. ಇಂಟರ್ಫೇಸ್ ಮೂಲಕ ಚುಚ್ಚುಮದ್ದಿನ ವಿಧಾನವನ್ನು ಒದಗಿಸುವುದು ಮುಖ್ಯವಾಗಿದೆ. ಕ್ಲೈಂಟ್ ಮತ್ತು ಅದರ ಅವಲಂಬನೆಗಳನ್ನು ಪರಿಚಯಿಸಲು ಇನ್ನೂ ಜೋಡಣೆಯ ಅಗತ್ಯವಿದೆ. ಜೋಡಿಸುವವನು ಗ್ರಾಹಕನಿಗೆ ಒಂದು ಉಲ್ಲೇಖವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತಾನೆ, ಅದನ್ನು ಆ ಅವಲಂಬನೆಯನ್ನು ಹೊಂದಿಸುವ ಸೆಟ್ಟರ್ ಇಂಟರ್ಫೇಸ್ಗೆ ಹಾಕುತ್ತಾನೆ ಮತ್ತು ಅದನ್ನು ಆ ಅವಲಂಬನೆಯ ವಸ್ತುವಿಗೆ ರವಾನಿಸುತ್ತಾನೆ, ಅದು ತನ್ನದೇ ಆದ ಉಲ್ಲೇಖವನ್ನು ಗ್ರಾಹಕನಿಗೆ ಹಿಂದಿರುಗಿಸುತ್ತದೆ. ಇಂಟರ್ಫೇಸ್ ಇಂಜೆಕ್ಷನ್ ಮೌಲ್ಯವನ್ನು ಹೊಂದಲು, ಅವಲಂಬನೆಯು ಕೇವಲ ತನ್ನ ಬಗ್ಗೆ ಒಂದು ಉಲ್ಲೇಖವನ್ನು ಹಿಂದಿರುಗಿಸುವುದರ ಜೊತೆಗೆ ಏನನ್ನಾದರೂ ಮಾಡಬೇಕು. ಇದು ಇತರ ಅವಲಂಬನೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಕಾರ್ಖಾನೆ ಅಥವಾ ಉಪ-ಜೋಡಣೆಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿರಬಹುದು, ಹೀಗಾಗಿ ಮುಖ್ಯ ಜೋಡಣೆಯಿಂದ ಕೆಲವು ವಿವರಗಳನ್ನು ಅಮೂರ್ತಗೊಳಿಸುತ್ತದೆ. ಇದು ಉಲ್ಲೇಖ-ಎಣಿಕೆಯಾಗಿರಬಹುದು, ಇದರಿಂದಾಗಿ ಅವಲಂಬಿತರಿಗೆ ಎಷ್ಟು ಗ್ರಾಹಕರು ಅದನ್ನು ಬಳಸುತ್ತಿದ್ದಾರೆಂದು ತಿಳಿಯುತ್ತದೆ. ಅವಲಂಬನೆಯು ಗ್ರಾಹಕರ ಸಂಗ್ರಹವನ್ನು ನಿರ್ವಹಿಸಿದರೆ, ಅದು ನಂತರ ಅವರೆಲ್ಲರಿಗೂ ತನ್ನದೇ ಆದ ವಿಭಿನ್ನ ನಿದರ್ಶನವನ್ನು ನೀಡಬಹುದು. ಸಾರ್ವಜನಿಕ ಇಂಟರ್ಫೇಸ್ ಸರ್ವೀಸ್ ಸೆಟ್ಟರ್ {ಶೂನ್ಯ ಸೆಟ್ ಸರ್ವಿಸ್ (ಸೇವಾ ಸೇವೆ);} ಸಾರ್ವಜನಿಕ ವರ್ಗದ ಕ್ಲೈಂಟ್ ಸರ್ವೀಸ್ ಸೆಟ್ಟರ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ {ಖಾಸಗಿ ಸೇವಾ ಸೇವೆ; @Override ಸಾರ್ವಜನಿಕ ಶೂನ್ಯ ಸೆಟ್ ಸರ್ವಿಸ್ (ಸೇವಾ ಸೇವೆ) {(ಸೇವೆ = ಶೂನ್ಯ) {ಹೊಸ ಅಕ್ರಮ ಆರ್ಗ್ಯುಮೆಂಟ್ ಎಕ್ಸೆಪ್ಶನ್ ಅನ್ನು ಎಸೆಯಿರಿ ("ಸೇವೆಯು ಶೂನ್ಯವಾಗಿರಬಾರದು");} this.service = ಸೇವೆ;} ಸಾರ್ವಜನಿಕ ವರ್ಗದ ಸರ್ವೀಸ್ ಇಂಜೆಕ್ಟರ್ {ಖಾಸಗಿ ಅಂತಿಮ ಸೆಟ್ <ಸರ್ವೀಸ್ ಸೆಟ್ಟರ್> ಕ್ಲೈಂಟ್ಗಳು = ಹೊಸ ಹ್ಯಾಶ್ ಸೆಟ್ <> (); ಸಾರ್ವಜನಿಕ ಶೂನ್ಯ ಇಂಜೆಕ್ಟ್ (ಸರ್ವೀಸ್ ಸೆಟ್ಟರ್ ಕ್ಲೈಂಟ್) {this.clients.add (ಕ್ಲೈಂಟ್); client.setService (ಹೊಸ ಉದಾಹರಣೆ ಸೇವೆ ();} ಸಾರ್ವಜನಿಕ ಶೂನ್ಯ ಸ್ವಿಚ್ () ಸಾರ್ವಜನಿಕ ವರ್ಗದ ಪ್ರೋಗ್ರಾಂ {ಸಾರ್ವಜನಿಕ ಸ್ಥಿರ ಶೂನ್ಯ ಮುಖ್ಯ (ಸ್ಟ್ರಿಂಗ್ [] ಆರ್ಗ್ಸ್) {// ಸೇವೆಯನ್ನು ನಿರ್ಮಿಸಿ. ಸೇವಾ ಸೇವೆ = ಹೊಸ ಉದಾಹರಣೆ ಸೇವೆ ();// ಕ್ಲೈಂಟ್ಗೆ ಸೇವೆಯನ್ನು ಚುಚ್ಚಿಕೊಳ್ಳಿ. ಕ್ಲೈಂಟ್ ಕ್ಲೈಂಟ್ = ಹೊಸ ಕ್ಲೈಂಟ್ (ಸೇವೆ);// ವಸ್ತುಗಳನ್ನು ಬಳಸಿ. ಕೈಪಿಡಿ ನಿರ್ಮಾಣವು ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗಿರಬಹುದು ಮತ್ತು ಬಿಲ್ಡರ್ಗಳು, ಕಾರ್ಖಾನೆಗಳು ಅಥವಾ ಇತರ ನಿರ್ಮಾಣ ಮಾದರಿಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಫ್ರೇಮ್ವರ್ಕ್ಸ್ ಮ್ಯಾನ್ಯುಯಲ್ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಸಾಮಾನ್ಯವಾಗಿ ದೊಡ್ಡ ಯೋಜನೆಗಳಿಗೆ ಬೇಸರದ ಮತ್ತು ದೋಷ-ಪೀಡಿತವಾಗಿದೆ, ಇದು ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸುವ ಫ್ರೇಮ್ವರ್ಕ್ಗಳ ಬಳಕೆಯನ್ನು ಉತ್ತೇಜಿಸುತ್ತದೆ. ಬಿಲ್ಡಿಂಗ್ ಕೋಡ್ ಇನ್ನು ಮುಂದೆ ಅಪ್ಲಿಕೇಶನ್ಗೆ ಕಸ್ಟಮ್ ಆಗಿಲ್ಲದ ನಂತರ ಮತ್ತು ಸಾರ್ವತ್ರಿಕವಾದ ನಂತರ ಹಸ್ತಚಾಲಿತ ಅವಲಂಬನೆ ಇಂಜೆಕ್ಷನ್ ಒಂದು ಅವಲಂಬನೆ ಇಂಜೆಕ್ಷನ್ ಫ್ರೇಮ್ವರ್ಕ್ ಆಗುತ್ತದೆ. ಉಪಯುಕ್ತವಾಗಿದ್ದರೂ, ಅವಲಂಬನೆಯ ಚುಚ್ಚುಮದ್ದನ್ನು ಮಾಡಲು ಈ ಉಪಕರಣಗಳು ಅಗತ್ಯವಿಲ್ಲ. ಸ್ಪ್ರಿಂಗ್ ನಂತಹ ಕೆಲವು ಚೌಕಟ್ಟುಗಳು, ಪ್ರೋಗ್ರಾಂ ಸಂಯೋಜನೆಯನ್ನು ಯೋಜಿಸಲು ಬಾಹ್ಯ ಸಂರಚನೆಯ ಕಡತಗಳನ್ನು ಬಳಸಬಹುದುಃ ಆಮದು org.springframework.beans.factory.BeanFactory; ಆಮದು org.springframework.context.ApplicationContext; ಆಮದು org.springframework.context.support.ClassPathXmlApplicationContext; ಸಾರ್ವಜನಿಕ ವರ್ಗದ ಇಂಜೆಕ್ಟರ್ {ಸಾರ್ವಜನಿಕ ಸ್ಥಿರ ಶೂನ್ಯ ಮುಖ್ಯ (ಸ್ಟ್ರಿಂಗ್ [] ಆರ್ಗ್ಸ್) {// ಯಾವ ಕಾಂಕ್ರೀಟ್ ಸೇವೆಯನ್ನು ಬಳಸಬೇಕೆಂಬುದರ ವಿವರಗಳನ್ನು ಪ್ರೋಗ್ರಾಂನಿಂದ ಪ್ರತ್ಯೇಕವಾಗಿ ಸಂರಚನೆಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಬೀನ್ಫ್ಯಾಕ್ಟರಿ ಬೀನ್ಫ್ಯಾಕ್ಟರಿ = ಹೊಸ ಕ್ಲಾಸ್ಪಾತ್ಎಕ್ಸ್ಎಂಎಲ್ ಅಪ್ಲಿಕೇಶನ್ ಕಾಂಟೆಕ್ಸ್ಟ್ ("Beans.xml"); ಕ್ಲೈಂಟ್ ಕ್ಲೈಂಟ್ = (ಕ್ಲೈಂಟ್) beanfactory.getBean ("ಕ್ಲೈಂಟ್"); System.out.println (client.greet ();} ಸಂಭಾವ್ಯವಾಗಿ ಉದ್ದವಾದ ಮತ್ತು ಸಂಕೀರ್ಣವಾದ ಆಬ್ಜೆಕ್ಟ್ ಗ್ರಾಫ್ನೊಂದಿಗೆ, ಕೋಡ್ನಲ್ಲಿ ಉಲ್ಲೇಖಿಸಲಾದ ಏಕೈಕ ವರ್ಗವು ಪ್ರವೇಶ ಬಿಂದುವಾಗಿದೆ, ಈ ಸಂದರ್ಭದಲ್ಲಿ Client.Client ಸ್ಪ್ರಿಂಗ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಯಾವುದೇ ಬದಲಾವಣೆಗಳಿಗೆ ಒಳಗಾಗಿಲ್ಲ ಮತ್ತು ಪಿಒಜೆಒ ಆಗಿ ಉಳಿದಿದೆ. ಸ್ಪ್ರಿಂಗ್-ನಿರ್ದಿಷ್ಟ ಟಿಪ್ಪಣಿಗಳು ಮತ್ತು ಕರೆಗಳು ಅನೇಕ ವರ್ಗಗಳಲ್ಲಿ ಹರಡುವುದನ್ನು ತಡೆಯುವ ಮೂಲಕ, ವ್ಯವಸ್ಥೆಯು ಸ್ಪ್ರಿಂಗ್ ಮೇಲೆ ಮಾತ್ರ ಸಡಿಲವಾಗಿ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ. ಉದಾಹರಣೆಗಳು ಆಂಗ್ಯುಲರ್ ಜೆಎಸ್ ಅವಲಂಬನೆ ಚುಚ್ಚುಮದ್ದಿನ ಮೂಲಕ ಶುಭಾಶಯ ಸೇವೆಯನ್ನು ಸ್ವೀಕರಿಸುವ ಆಂಗ್ಯುಲರ್ ಜೆಎಸ್ ಘಟಕವನ್ನು ಈ ಕೆಳಗಿನ ಉದಾಹರಣೆಯು ತೋರಿಸುತ್ತದೆ. ಫಂಕ್ಷನ್ ಸಮ್ಕ್ಲಾಸ್ (ಗ್ರೀಟರ್) {this.greeter = ಗ್ರೀಟರ್;} SomeClass.prototype.doSomething = ಫಂಕ್ಷನ್ (ಹೆಸರು) {this.greeter.greet (ಹೆಸರು);} ಪ್ರತಿ ಆಂಗ್ಯುಲರ್ ಜೆಎಸ್ ಅಪ್ಲಿಕೇಶನ್ ಅವಲಂಬನೆಗಳ ನಿರ್ಮಾಣ ಮತ್ತು ವೀಕ್ಷಣೆಗೆ ಜವಾಬ್ದಾರರಾಗಿರುವ ಸರ್ವೀಸ್ ಲೊಕೇಟರ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. //ಮಾಡ್ಯೂಲ್ ವರ್ ಮೈ ಮಾಡ್ಯೂಲ್ = angular.module ('ಮೈ ಮಾಡ್ಯೂಲ್', []) ನಲ್ಲಿ ವೈರಿಂಗ್ ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸಿ;// ಸ್ವಾಗತ ಸೇವೆಯನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸಬೇಕೆಂದು ಇಂಜೆಕ್ಟರ್ಗೆ ಕಲಿಸಿ. //ಸ್ವಾಗತಿಸುವವರು $ವಿಂಡೋ ಸೇವೆಯ ಮೇಲೆ ಅವಲಂಬಿತರಾಗಿದ್ದಾರೆ. myModule.factory ('ಗ್ರೀಟರ್', ಫಂಕ್ಷನ್ ($ವಿಂಡೋ) {ರಿಟರ್ನ್ {ಗ್ರೀಟ್ಃ ಫಂಕ್ಷನ್ (ಟೆಕ್ಸ್ಟ್) {$window.alert (ಟೆಕ್ಸ್ಟ್);}};}); ನಂತರ ನಾವು ಸ್ವಾಗತ ಸೇವೆಯನ್ನು ಒಳಗೊಂಡಂತೆ ಮೈ ಮಾಡ್ಯೂಲ್ ಮಾಡ್ಯೂಲ್ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಘಟಕಗಳನ್ನು ಒದಗಿಸುವ ಹೊಸ ಇಂಜೆಕ್ಟರ್ ಅನ್ನು ರಚಿಸಬಹುದು. ವರ್ ಇಂಜೆಕ್ಟರ್ = angular.injector (['ಮೈ ಮಾಡ್ಯೂಲ್', 'ng']); ವರ್ ಗ್ರೀಟರ್ = injector.get ('ಗ್ರೀಟರ್'); ಸರ್ವೀಸ್ ಲೊಕೇಟರ್ ಆಂಟಿಪೇಟರ್ನ್ ಅನ್ನು ತಪ್ಪಿಸಲು, ಆಂಗ್ಯುಲರ್ ಜೆಎಸ್ ಎಚ್ಟಿಎಮ್ಎಲ್ ಟೆಂಪ್ಲೆಟ್ಗಳಲ್ಲಿ ಘೋಷಣಾತ್ಮಕ ಸಂಕೇತವನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಇದು ಇಂಜೆಕ್ಟರ್ಗೆ ಘಟಕಗಳನ್ನು ರಚಿಸುವುದನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. <ಡಿವಿಎನ್ಜಿ-ಕಂಟ್ರೋಲರ್ = "ಮೈ ಕಂಟ್ರೋಲರ್"> <ಬಟನ್ಎನ್ಜಿ-ಕ್ಲಿಕ್ = "ಸೇಹೆಲ್ಲೋ ()"> ಹಲೋ </ಬಟನ್> </ಡಿವ್> ಫಂಕ್ಷನ್ ಮೈ ಕಂಟ್ರೋಲರ್ ($ಸ್ಕೋಪ್, ಗ್ರೀಟರ್) {$scope.sayHello = ಫಂಕ್ಷನ್ () {greeter.greet ('ಹಲೋ ವರ್ಲ್ಡ್');};} ಎನ್ಜಿ-ಕಂಟ್ರೋಲರ್ ನಿರ್ದೇಶನವು ನಿಯಂತ್ರಕ ಮತ್ತು ಅದರ ಅವಲಂಬನೆಗಳ ಉದಾಹರಣೆಯನ್ನು ರಚಿಸಲು ಇಂಜೆಕ್ಟರ್ ಅನ್ನು ಪ್ರಚೋದಿಸುತ್ತದೆ. ಸಿ #ಈ ಮಾದರಿಯು ಸಿ #ನಲ್ಲಿ ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಇಂಜೆಕ್ಷನ್ಗೆ ಒಂದು ಉದಾಹರಣೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಸಿಸ್ಟಮ್ ಅನ್ನು ಬಳಸುವುದು; ನೇಮ್ಸ್ಪೇಸ್ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್;// ನಮ್ಮ ಕ್ಲೈಂಟ್ಗೆ ಈ ಇಂಟರ್ಫೇಸ್ ಬಗ್ಗೆ ಮಾತ್ರ ತಿಳಿಯುತ್ತದೆ, ಅದು ಯಾವ ನಿರ್ದಿಷ್ಟ ಗೇಮ್ಪ್ಯಾಡ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ ಎಂಬುದು ಅಲ್ಲ. ಇಂಟರ್ಫೇಸ್ ಐಗಾಮೆಪ್ಯಾಡ್ ಫಂಕ್ಷನಾಲಿಟಿ {ಸ್ಟ್ರಿಂಗ್ ಗೆಟ್ಗೇಮ್ಪ್ಯಾಡ್ ನೇಮ್ (); ಅನೂರ್ಜಿತ ಸೆಟ್ ವೈಬ್ರೇಷನ್ ಪವರ್ (ಫ್ಲೋಟ್ ಪವರ್);}// ಈ ಕೆಳಗಿನ ಸೇವೆಗಳು ಮೇಲಿನ ಇಂಟರ್ಫೇಸ್ನ ಕಾಂಕ್ರೀಟ್ ಅನುಷ್ಠಾನಗಳನ್ನು ಒದಗಿಸುತ್ತವೆ. ಕ್ಲಾಸ್ ಎಕ್ಸ್ಬಾಕ್ಸ್ ಗೇಮ್ಪ್ಯಾಡ್ಃ ಐಗಾಮೆಪ್ಯಾಡ್ ಕಾರ್ಯಕ್ಷಮತೆ {ಫ್ಲೋಟ್ ವೈಬ್ರೇಷನ್ ಪವರ್ = 1.0f; ಸಾರ್ವಜನಿಕ ಸ್ಟ್ರಿಂಗ್ ಗೆಟ್ಗೇಮ್ಪ್ಯಾಡ್ ನೇಮ್ () => "ಎಕ್ಸ್ಬಾಕ್ಸ್ ನಿಯಂತ್ರಕ"; ಸಾರ್ವಜನಿಕ ಶೂನ್ಯ ಸೆಟ್ವೈಬ್ರೇಷನ್ ಪವರ್ (ಫ್ಲೋಟ್ ಪವರ್) => this.vibrationPower = Math.Clamp (ಪವರ್, 0.0f, 1.0f);} ಕ್ಲಾಸ್ ಪ್ಲೇಸ್ಟೇಷನ್ ಜಾಯ್ಸ್ಟಿಕ್ಃ ಐಗಾಮೆಪ್ಯಾಡ್ ಕಾರ್ಯಕ್ಷಮತೆ {ಫ್ಲೋಟ್ ವೈಬ್ರೇಟಿಂಗ್ ಪವರ್ = 100.0f; ಸಾರ್ವಜನಿಕ ಸ್ಟ್ರಿಂಗ್ ಗೆಟ್ಗೇಮ್ಪ್ಯಾಡ್ ನೇಮ್ () => "ಪ್ಲೇಸ್ಟೇಷನ್ ನಿಯಂತ್ರಕ"; ಸಾರ್ವಜನಿಕ ಶೂನ್ಯ ಸೆಟ್ವೈಬ್ರೇಷನ್ ಪವರ್ (ಫ್ಲೋಟ್ ಪವರ್) => this.vibratingPower = Math.Clamp (ಪವರ್ * 100.0f, 0.0f, 100.0f) ಕ್ಲಾಸ್ ಗೇಮ್ಪ್ಯಾಡ್ {ಐಗಾಮೆಪ್ಯಾಡ್ಫಂಕ್ಷನಾಲಿಟಿ ಗೇಮ್ಪ್ಯಾಡ್ಫಂಕ್ಷನಾಲಿಟಿ;// ಈ ಸೇವೆಯನ್ನು ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ಮೂಲಕ ಚುಚ್ಚಲಾಗುತ್ತದೆ ಮತ್ತು ಮೇಲಿನ ಕ್ಷೇತ್ರದಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಸಾರ್ವಜನಿಕ ಗೇಮ್ಪ್ಯಾಡ್ (ಐಗಾಮೆಪ್ಯಾಡ್ ಫಂಕ್ಷನಾಲಿಟಿ ಗೇಮ್ಪ್ಯಾಡ್ಫಂಕ್ಷನಾಲಿಟಿ) => this.gamepadFunctionality = ಗೇಮ್ಪ್ಯಾಡ್ಫಂಕ್ಷನಾಲಿಟಿ; ಸಾರ್ವಜನಿಕ ಶೂನ್ಯ ಶೋಕೇಸ್ () {// ಚುಚ್ಚುಮದ್ದಿನ ಸೇವೆಯನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ವಾರ್ ಗೇಮ್ಪ್ಯಾಡ್ನ ಹೆಸರು = this.gamepadFunctionality.GetGamepadName (); ವರ್ ಸಂದೇಶ = $"ನಾವು ಈಗ {ಗೇಮ್ಪ್ಯಾಡ್ನ ಹೆಸರು} ಅನ್ನು ಬಳಸುತ್ತಿದ್ದೇವೆ, ನೀವು ಕಂಪನ ಶಕ್ತಿಯನ್ನು ಬದಲಾಯಿಸಲು ಬಯಸುತ್ತೀರಾ? "; Console.WriteLine (ಸಂದೇಶ);}} ವರ್ಗ ಪ್ರೋಗ್ರಾಂ {ಸ್ಥಿರ ಶೂನ್ಯ ಮುಖ್ಯ () {ವರ್ ಸ್ಟೀಮ್ ಕಂಟ್ರೋಲರ್ = ಹೊಸ ಸ್ಟೀಮ್ ಕಂಟ್ರೋಲರ್ ();// ನಾವು ಎಕ್ಸ್ಬಾಕ್ಸ್ ಕಂಟ್ರೋಲರ್, ಪ್ಲೇಸ್ಟೇಷನ್ ಜಾಯ್ಸ್ಟಿಕ್, ಇತ್ಯಾದಿಗಳಲ್ಲಿ ಸಹ ಉತ್ತೀರ್ಣರಾಗಬಹುದಿತ್ತು. //ಗೇಮ್ಪ್ಯಾಡ್ಗೆ ಅದು ಏನು ಬಳಸುತ್ತಿದೆ ಮತ್ತು ಅದರ ಅಗತ್ಯವಿಲ್ಲ ಎಂಬುದು ತಿಳಿದಿರುವುದಿಲ್ಲ. ವರ್ ಗೇಮ್ಪ್ಯಾಡ್ = ಹೊಸ ಗೇಮ್ಪ್ಯಾಡ್ (ಸ್ಟೀಮ್ ಕಂಟ್ರೋಲರ್); gamepad.Showcase ();}} ಸಹ ನೋಡಿ ಆರ್ಕಿಟೆಕ್ಚರ್ ವಿವರಣೆ ಭಾಷೆ ಫ್ಯಾಕ್ಟರಿ ಪ್ಯಾಟರ್ನ್ ಇನ್ವರ್ಷನ್ ಆಫ್ ಕಂಟ್ರೋಲ್ ಪ್ಲಗ್-ಇನ್ (ಕಂಪ್ಯೂಟಿಂಗ್) ಸ್ಟ್ರಾಟಜಿ ಪ್ಯಾಟರ್ನ್ ಆಂಗ್ಯುಲರ್ ಜೆಎಸ್ ಸರ್ವೀಸ್ ಲೊಕೇಟರ್ ಪ್ಯಾಟರ್ನ್ ಪ್ಯಾರಾಮೀಟರ್ (ಕಂಪ್ಯೂಟರ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್) ಕ್ವಾಜೆಕ್ಟ್ ಉಲ್ಲೇಖಗಳು ಬಾಹ್ಯ ಕೊಂಡಿಗಳು ಕಂಪೋಸಿಷನ್ ರೂಟ್ ಬೈ ಮಾರ್ಕ್ ಸೀಮನ್ ಎ ಬಿಗಿನರ್ಸ್ ಗೈಡ್ ಟು ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ & ಟೆಸ್ಟಬಲ್ ಆಬ್ಜೆಕ್ಟ್ಸ್ಃ ಡಿಸೈನಿಂಗ್ ಡಿಲಿ ಕಪಲ್ಡ್ ಅಂಡ್ ಟೆಸ್ಟಬಲ್ ಆಬ್ಜೆಕ್ಟ್ಸ್-ಜೆರೆಮಿ ವೈಸ್ಕಾಟನ್; ಡಾ. ಡಾಬ್ಸ್ ಜರ್ನಲ್, ಮೇ 2006. ಡಿಸೈನ್ ಪ್ಯಾಟರ್ನ್ಸ್ಃ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್-- ಎಮ್ಎಸ್ಡಿಎನ್ ಮ್ಯಾಗಜೀನ್, ಸೆಪ್ಟೆಂಬರ್ 2005 ಮಾರ್ಟಿನ್ ಫೌಲರ್ ಅವರ ಮೂಲ ಲೇಖನವು ಇಎಎಯ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಪಿ ಎಂಬ ಪದವನ್ನು ಪರಿಚಯಿಸಿತುಃ ಪ್ಲಗಿನ್ ದಿ ರಿಚ್ ಎಂಜಿನಿಯರಿಂಗ್ ಹೆರಿಟೇಜ್ ಬಿಹೈಂಡ್ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್-ಆಂಡ್ರ್ಯೂ ಮ್ಯಾಕ್ವೀ-ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ನ ವಿವರವಾದ ಇತಿಹಾಸ. ಅವಲಂಬನೆ ಇಂಜೆಕ್ಷನ್ ಎಂದರೇನು? - ಒಂದು ಪರ್ಯಾಯ ವಿವರಣೆ-ಜಾಕೋಬ್ ಜೆನ್ಕೋವ್ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ನೊಂದಿಗೆ ಹೆಚ್ಚು ಪರೀಕ್ಷಿಸಬಹುದಾದ ಕೋಡ್ ಅನ್ನು ಬರೆಯುವುದು-- Developer.com, ಅಕ್ಟೋಬರ್ 2006 ಮ್ಯಾನೇಜ್ಡ್ ಎಕ್ಸ್ಟೆನ್ಸಿಬಿಲಿಟಿ ಫ್ರೇಮ್ವರ್ಕ್ ಅವಲೋಕನ-- MSDN ಹಂಟ್ 1998 ರಿಫ್ಯಾಕ್ಟರ್ ಯುವರ್ ವೇ ಟು ಎ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಕಂಟೇನರ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಪಿಎಚ್ಪಿಯಲ್ಲಿ ಡಿಐ ನಿಮಗೆ ಡಿಪೆಂಡೆನ್ಸಿ ಇಂಜೆಕ್ಷನ್ ಕಂಟೇನರ್ ಕಾಂಪೊನೆಂಟ್-ಆಧಾರಿತ ಸಾಫ್ಟ್ವೇರ್ ಎಂಜಿನಿಯರಿಂಗ್ ಸಾಫ್ಟ್ವೇರ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಸಾಫ್ಟ್ವೇರ್ ವಿನ್ಯಾಸ ಮಾದರಿಗಳ ಅಗತ್ಯವಿಲ್ಲ ಉದಾಹರಣೆಗೆ ಜಾವಾ ಕೋಡ್ ಹೊಂದಿರುವ ಲೇಖನಗಳು