Dependency injection
સોફ્ટવેર એન્જિનિયરિંગમાં, ડિપેન્ડન્સી ઈન્જેક્શન એ એક પ્રોગ્રામિંગ તકનીક છે જેમાં ઑબ્જેક્ટ અથવા ફંક્શન અન્ય ઑબ્જેક્ટ્સ અથવા ફંક્શન્સ મેળવે છે જે તેને જરૂરી છે, તેમને આંતરિક રીતે બનાવવાના વિરોધમાં. ડિપેન્ડન્સી ઈન્જેક્શનનો ઉદ્દેશ વસ્તુઓના નિર્માણ અને તેનો ઉપયોગ કરવાની ચિંતાઓને અલગ કરવાનો છે, જે ઢીલી રીતે જોડાયેલા કાર્યક્રમો તરફ દોરી જાય છે. પેટર્ન એ સુનિશ્ચિત કરે છે કે જે ઑબ્જેક્ટ અથવા ફંક્શન આપેલ સેવાનો ઉપયોગ કરવા માંગે છે તેને તે સેવાઓનું નિર્માણ કેવી રીતે કરવું તે જાણવું જોઈએ નહીં. તેના બદલે, પ્રાપ્ત કરનાર 'ક્લાયન્ટ' (ઓબ્જેક્ટ અથવા ફંક્શન) ને તેની નિર્ભરતા બાહ્ય કોડ (એક 'ઇન્જેક્ટર') દ્વારા પૂરી પાડવામાં આવે છે, જેની તેને જાણ નથી. અવલંબન ઈન્જેક્શન ગર્ભિત અવલંબનને સ્પષ્ટ બનાવે છે અને નીચેની સમસ્યાઓનું સમાધાન કરવામાં મદદ કરે છેઃ એક વર્ગ તેના પર નિર્ભર વસ્તુઓની રચનાથી કેવી રીતે સ્વતંત્ર હોઈ શકે? એપ્લિકેશન અને તેનો ઉપયોગ કરતી વસ્તુઓ વિવિધ રૂપરેખાંકનોને કેવી રીતે સમર્થન આપી શકે છે? કોડના ભાગને સીધા સંપાદિત કર્યા વિના તેની વર્તણૂક કેવી રીતે બદલી શકાય? ડિપેન્ડન્સી ઈન્જેક્શનનો ઉપયોગ ઘણીવાર કોડને ડિપેન્ડન્સી ઇન્વર્ઝન સિદ્ધાંત સાથે સુસંગત રાખવા માટે થાય છે. સ્ટેટીકલી-ટાઇપ કરેલી ભાષાઓમાં ડિપેન્ડન્સી ઈન્જેક્શનનો ઉપયોગ કરવાનો અર્થ એ છે કે ક્લાયન્ટને તેમના નક્કર અમલીકરણને બદલે તે જે સેવાઓનો ઉપયોગ કરે છે તેના ઇન્ટરફેસોને જાહેર કરવાની જરૂર છે, જેનાથી ફરીથી સંકલન કર્યા વિના રનટાઇમ પર કઈ સેવાઓનો ઉપયોગ કરવામાં આવે છે તે બદલવાનું સરળ બને છે. એપ્લિકેશન માળખું ઘણીવાર ડિપેન્ડન્સી ઈન્જેક્શનને ઇન્વર્ઝન ઓફ કંટ્રોલ સાથે જોડે છે. નિયંત્રણના વ્યુત્ક્રમ હેઠળ, માળખું પહેલા ઑબ્જેક્ટ (જેમ કે નિયંત્રક) બનાવે છે, પછી તેને નિયંત્રણ પ્રવાહ પસાર કરે છે. અવલંબન ઈન્જેક્શન સાથે, માળખું એપ્લિકેશન ઓબ્જેક્ટ (ઘણીવાર કન્સ્ટ્રક્ટર પદ્ધતિના પરિમાણોમાં) દ્વારા જાહેર કરાયેલ અવલંબનને પણ ત્વરિત કરે છે, અને અવલંબનને ઓબ્જેક્ટમાં પસાર કરે છે. ડિપેન્ડન્સી ઈન્જેક્શન "ડિપેન્ડન્સીના અમલીકરણ પર નિયંત્રણને ઉલટાવી દેવાનો" વિચાર અમલમાં મૂકે છે, તેથી જ અમુક જાવા માળખાઓ સામાન્ય રીતે "નિયંત્રણના વ્યુત્ક્રમ" ખ્યાલને નામ આપે છે (નિયંત્રણ પ્રવાહના વ્યુત્ક્રમ સાથે મૂંઝવણ ન કરવી). રોલ્સ ડિપેન્ડન્સી ઈન્જેક્શનમાં ચાર ભૂમિકાઓનો સમાવેશ થાય છેઃ સેવાઓ, ક્લાયન્ટ્સ, ઇન્ટરફેસ અને ઇન્જેક્ટર. સેવાઓ અને ગ્રાહકો સેવા એ કોઈપણ વર્ગ છે જે ઉપયોગી કાર્યક્ષમતા ધરાવે છે. બદલામાં, ગ્રાહક એ કોઈપણ વર્ગ છે જે સેવાઓનો ઉપયોગ કરે છે. ગ્રાહકને જે સેવાઓની જરૂર હોય છે તે ગ્રાહકની નિર્ભરતા છે. કોઈપણ વસ્તુ સેવા અથવા ગ્રાહક હોઈ શકે છે; નામો માત્ર ઈન્જેક્શનમાં વસ્તુઓની ભૂમિકા સાથે સંબંધિત છે. એક જ વસ્તુ ગ્રાહક (તે ઇન્જેક્ટેડ સેવાઓનો ઉપયોગ કરે છે) અને સેવા (તે અન્ય વસ્તુઓમાં ઇન્જેક્ટ કરવામાં આવે છે) બંને પણ હોઈ શકે છે. ઈન્જેક્શન પછી, સેવાને ગ્રાહકના રાજ્યનો ભાગ બનાવવામાં આવે છે, જે ઉપયોગ માટે ઉપલબ્ધ હોય છે. ઇન્ટરફેસ ગ્રાહકોએ તેમની નિર્ભરતા કેવી રીતે લાગુ કરવામાં આવે છે તે જાણવું જોઈએ નહીં, માત્ર તેમના નામ અને API. દાખલા તરીકે, ઇમેઇલ્સ પુનઃપ્રાપ્ત કરતી સેવા, પડદા પાછળ આઇએમએપી અથવા પી. ઓ. પી. 3 પ્રોટોકોલનો ઉપયોગ કરી શકે છે, પરંતુ આ વિગત કદાચ કૉલિંગ કોડ માટે અપ્રસ્તુત છે જે ફક્ત ઇમેઇલ પુનઃપ્રાપ્ત કરવા માંગે છે. અમલીકરણની વિગતોને અવગણીને, ગ્રાહકોએ જ્યારે તેમની નિર્ભરતા હોય ત્યારે બદલવાની જરૂર નથી. ઇન્જેક્ટર ઇન્જેક્ટર, જેને કેટલીકવાર એસેમ્બલર, કન્ટેનર, પ્રદાતા અથવા ફેક્ટરી પણ કહેવામાં આવે છે, તે ગ્રાહકને સેવાઓનો પરિચય આપે છે. ઇન્જેક્ટરની ભૂમિકા જટિલ ઓબ્જેક્ટ ગ્રાફ બનાવવાની અને જોડવાની છે, જ્યાં ઓબ્જેક્ટ ગ્રાહકો અને સેવાઓ બંને હોઈ શકે છે. ઇન્જેક્ટર પોતે એકસાથે કામ કરતી ઘણી વસ્તુઓ હોઈ શકે છે, પરંતુ તે ગ્રાહક ન હોવો જોઈએ, કારણ કે આ ગોળાકાર નિર્ભરતા બનાવશે. કારણ કે ડિપેન્ડન્સી ઈન્જેક્શન ઓબ્જેક્ટ્સ કેવી રીતે બનાવવામાં આવે છે અને તેનો ઉપયોગ કેવી રીતે કરવામાં આવે છે તે અલગ પાડે છે, તે ઘણીવાર મોટાભાગની ઓબ્જેક્ટ-ઓરિએન્ટેડ ભાષાઓમાં જોવા મળતા નવા મુખ્ય શબ્દનું મહત્વ ઘટાડે છે. કારણ કે માળખું સેવાઓ બનાવવાનું સંભાળે છે, પ્રોગ્રામર માત્ર સીધા જ મૂલ્યની વસ્તુઓનું નિર્માણ કરે છે જે પ્રોગ્રામના ડોમેનમાં સંસ્થાઓનું પ્રતિનિધિત્વ કરે છે (જેમ કે વ્યવસાય એપ્લિકેશનમાં કર્મચારી ઑબ્જેક્ટ અથવા શોપિંગ એપ્લિકેશનમાં ઓર્ડર ઑબ્જેક્ટ). સામ્યતા એક સામ્યતા તરીકે, કારને એવી સેવાઓ તરીકે વિચારી શકાય છે જે લોકોને એક જગ્યાએથી બીજી જગ્યાએ લઈ જવાનું ઉપયોગી કાર્ય કરે છે. કારના એન્જિનને ગેસ, ડીઝલ અથવા વીજળીની જરૂર પડી શકે છે, પરંતુ આ વિગત ગ્રાહક માટે બિનમહત્વપૂર્ણ છે-એક ડ્રાઈવર-જે માત્ર ત્યારે જ ધ્યાન રાખે છે જો તે તેમને તેમના ગંતવ્ય સુધી પહોંચાડી શકે. કાર તેમના પેડલ, સ્ટીયરિંગ વ્હીલ્સ અને અન્ય નિયંત્રણો દ્વારા એક સમાન ઇન્ટરફેસ રજૂ કરે છે. જેમ કે, ફેક્ટરી લાઇન પર તેમને કયા એન્જિન સાથે 'ઇન્જેક્ટ' કરવામાં આવ્યું હતું તે બાબત બંધ થઈ જાય છે અને ડ્રાઇવરો જરૂરિયાત મુજબ કોઈપણ પ્રકારની કાર વચ્ચે સ્વિચ કરી શકે છે. ફાયદા અને ગેરફાયદા નિર્ભરતા ઈન્જેક્શનનો મૂળભૂત ફાયદો એ છે કે વર્ગો અને તેમની નિર્ભરતા વચ્ચે જોડાણમાં ઘટાડો થાય છે. ક્લાયન્ટની નિર્ભરતાઓ કેવી રીતે લાગુ કરવામાં આવે છે તેના જ્ઞાનને દૂર કરીને, કાર્યક્રમો વધુ ફરીથી વાપરી શકાય તેવા, પરીક્ષણક્ષમ અને જાળવણીપાત્ર બને છે. આના પરિણામે લવચિકતામાં વધારો થાય છેઃ ક્લાયન્ટ એવી કોઈ પણ વસ્તુ પર કાર્ય કરી શકે છે જે ક્લાયન્ટની અપેક્ષા મુજબ આંતરિક ઇન્ટરફેસને ટેકો આપે છે. વધુ સામાન્ય રીતે, નિર્ભરતા ઈન્જેક્શન બોઈલરપ્લેટ કોડને ઘટાડે છે, કારણ કે તમામ નિર્ભરતા નિર્માણ એક ઘટક દ્વારા નિયંત્રિત થાય છે. છેવટે, નિર્ભરતા ઈન્જેક્શન સહવર્તી વિકાસને મંજૂરી આપે છે. બે વિકાસકર્તાઓ સ્વતંત્ર રીતે એવા વર્ગો વિકસાવી શકે છે જે એકબીજાનો ઉપયોગ કરે છે, જ્યારે વર્ગો દ્વારા વાતચીત કરશે તે ઇન્ટરફેસને જાણવાની જરૂર છે. પ્લગઇનો ઘણીવાર તૃતીય પક્ષો દ્વારા વિકસાવવામાં આવે છે જે મૂળ ઉત્પાદનના વિકાસકર્તાઓ સાથે ક્યારેય વાત પણ કરતા નથી. અવલંબન ઈન્જેક્શનના ઘણા ફાયદાઓ એકમ-પરીક્ષણ માટે ખાસ કરીને સુસંગત છે. ઉદાહરણ તરીકે, ડિપેન્ડન્સી ઈન્જેક્શનનો ઉપયોગ સિસ્ટમની રૂપરેખાંકન વિગતોને રૂપરેખાંકન ફાઇલોમાં બાહ્ય બનાવવા માટે થઈ શકે છે, જેનાથી સિસ્ટમને ફરીથી સંકલન કર્યા વિના પુનઃરૂપરેખાંકિત કરી શકાય છે. વિવિધ પરિસ્થિતિઓ માટે અલગ રૂપરેખાંકનો લખી શકાય છે જેમાં ઘટકોના વિવિધ અમલીકરણની જરૂર પડે છે. તેવી જ રીતે, કારણ કે ડિપેન્ડન્સી ઈન્જેક્શનને કોડ વર્તણૂકમાં કોઈ ફેરફારની જરૂર નથી, તે રીફેક્ટરિંગ તરીકે લેગસી કોડ પર લાગુ કરી શકાય છે. આ ક્લાયન્ટ્સને વધુ સ્વતંત્ર બનાવે છે અને સ્ટબ્સ અથવા મોક ઓબ્જેક્ટ્સનો ઉપયોગ કરીને એકલ પરીક્ષણ કરવું સરળ બનાવે છે, જે પરીક્ષણ હેઠળ ન હોય તેવી અન્ય વસ્તુઓનું અનુકરણ કરે છે. પરીક્ષણની આ સરળતા ઘણીવાર ડિપેન્ડન્સી ઈન્જેક્શનનો ઉપયોગ કરતી વખતે પ્રથમ લાભ જોવા મળે છે. અવલંબન ઈન્જેક્શનના ટીકાકારો દલીલ કરે છે કે તેઃ એવા ગ્રાહકો બનાવે છે જે રૂપરેખાંકન વિગતોની માંગ કરે છે, જે સ્પષ્ટ ડિફોલ્ટ્સ ઉપલબ્ધ હોય ત્યારે મુશ્કેલ બની શકે છે. કોડને શોધવાનું મુશ્કેલ બનાવે છે કારણ કે તે વર્તનને બાંધકામથી અલગ કરે છે. તે સામાન્ય રીતે પ્રતિબિંબ અથવા ગતિશીલ પ્રોગ્રામિંગ સાથે અમલમાં મૂકવામાં આવે છે, જે IDE ઓટોમેશનને અવરોધે છે. સામાન્ય રીતે વધુ આગોતરા વિકાસ પ્રયાસની જરૂર પડે છે. માળખા પર નિર્ભરતાને પ્રોત્સાહન આપે છે. નિર્ભરતા ઈન્જેક્શનના પ્રકાર ત્રણ મુખ્ય રીતો છે જેમાં ગ્રાહક ઈન્જેક્શન સેવાઓ મેળવી શકે છેઃ કન્સ્ટ્રક્ટર ઈન્જેક્શન, જ્યાં ગ્રાહકના વર્ગ કન્સ્ટ્રક્ટર દ્વારા નિર્ભરતા પૂરી પાડવામાં આવે છે. સેટર ઈન્જેક્શન, જ્યાં ગ્રાહક સેટર પદ્ધતિનો ખુલાસો કરે છે જે નિર્ભરતાને સ્વીકારે છે. ઇન્ટરફેસ ઈન્જેક્શન, જ્યાં ડિપેન્ડન્સીનું ઇન્ટરફેસ એક ઇન્જેક્ટર પદ્ધતિ પ્રદાન કરે છે જે તેને પસાર કરેલા કોઈપણ ક્લાયન્ટમાં ડિપેન્ડન્સી દાખલ કરશે. કેટલાક માળખામાં, ગ્રાહકોએ સક્રિય રીતે નિર્ભરતા ઈન્જેક્શન સ્વીકારવાની જરૂર નથી. ઉદાહરણ તરીકે, જાવામાં, પરીક્ષણ કરતી વખતે અને સેવાઓને સીધી રીતે દાખલ કરતી વખતે પ્રતિબિંબ ખાનગી વિશેષતાઓને જાહેર કરી શકે છે. ડિપેન્ડન્સી ઈન્જેક્શન વિના નીચેના જાવા ઉદાહરણમાં, ક્લાયન્ટ ક્લાસ કન્સ્ટ્રક્ટરમાં શરૂ કરાયેલ સર્વિસ મેમ્બર વેરિયેબલ ધરાવે છે. ક્લાયન્ટ સીધી રચના કરે છે અને નિયંત્રિત કરે છે કે તે કઈ સેવાનો ઉપયોગ કરે છે, જે હાર્ડ-કોડેડ નિર્ભરતા બનાવે છે. જાહેર વર્ગ ક્લાયન્ટ {ખાનગી સેવા સેવા; ક્લાયન્ટ () {// નિર્ભરતા હાર્ડ-કોડેડ છે. this.service = નવું ઉદાહરણ સર્વિસ ();}} કન્સ્ટ્રક્ટર ઈન્જેક્શન ડિપેન્ડન્સી ઈન્જેક્શનનું સૌથી સામાન્ય સ્વરૂપ વર્ગ માટે તેના કન્સ્ટ્રક્ટર દ્વારા તેના અવલંબનની વિનંતી કરવાનું છે. આ સુનિશ્ચિત કરે છે કે ગ્રાહક હંમેશા માન્ય સ્થિતિમાં હોય, કારણ કે તેને તેની જરૂરી નિર્ભરતા વિના તાત્કાલિક કરી શકાતો નથી. પબ્લિક ક્લાસ ક્લાયન્ટ {ખાનગી સેવા સેવા;// નિર્ભરતા કન્સ્ટ્રક્ટર દ્વારા ઇન્જેક્ટ કરવામાં આવે છે. ક્લાયન્ટ (સેવા સેવા) {જો (સેવા = = નલ) {નવો ગેરકાયદેસર દલીલ અપવાદ ફેંકવો ("સેવા નલ હોવી જોઈએ નહીં");} this.service = સેવા;}} સેટર ઈન્જેક્શન કન્સ્ટ્રક્ટરને બદલે સેટર પદ્ધતિ દ્વારા નિર્ભરતા સ્વીકારીને, ગ્રાહકો ઇન્જેક્ટરને કોઈપણ સમયે તેમની નિર્ભરતામાં હેરફેર કરવાની મંજૂરી આપી શકે છે. આ લવચીકતા પ્રદાન કરે છે, પરંતુ ક્લાયન્ટનો ઉપયોગ થાય તે પહેલાં તમામ નિર્ભરતાઓ ઇન્જેક્ટ કરવામાં આવે છે અને માન્ય છે તેની ખાતરી કરવી મુશ્કેલ બનાવે છે. પબ્લિક ક્લાસ ક્લાયન્ટ {ખાનગી સેવા સેવા;// નિર્ભરતા સેટર પદ્ધતિ દ્વારા ઇન્જેક્ટ કરવામાં આવે છે. સાર્વજનિક રદબાતલ સેટ સર્વિસ (સેવા સેવા) {જો (સેવા = = નલ) {નવો ગેરકાયદેસર દલીલ મોકલો અપવાદ ("સેવા નલ હોવી જોઈએ નહીં");} this.service = સેવા;} ઇન્ટરફેસ ઈન્જેક્શન ઇન્ટરફેસ ઈન્જેક્શન સાથે, નિર્ભરતા તેમના ગ્રાહકોથી સંપૂર્ણપણે અજાણ હોય છે, તેમ છતાં હજુ પણ નવા ગ્રાહકોને સંદર્ભો મોકલે છે અને પ્રાપ્ત કરે છે. આ રીતે, નિર્ભરતાઓ ઇન્જેક્ટર બની જાય છે. કી એ છે કે ઇન્જેક્શન પદ્ધતિ ઇન્ટરફેસ દ્વારા પ્રદાન કરવામાં આવે છે. ગ્રાહક અને તેની નિર્ભરતાઓને રજૂ કરવા માટે હજુ પણ એસેમ્બલરની જરૂર છે. એસેમ્બલર ક્લાયન્ટનો સંદર્ભ લે છે, તેને સેટર ઇન્ટરફેસ પર મૂકે છે જે તે નિર્ભરતાને સુયોજિત કરે છે, અને તેને તે નિર્ભરતા ઑબ્જેક્ટ પર પસાર કરે છે જે બદલામાં ક્લાયન્ટને પોતાનો સંદર્ભ પાછો આપે છે. ઇન્ટરફેસ ઈન્જેક્શનનું મૂલ્ય હોય તે માટે, ડિપેન્ડન્સીએ ફક્ત પોતાનો સંદર્ભ પાછો આપવા ઉપરાંત કંઈક કરવું આવશ્યક છે. આ અન્ય અવલંબનને ઉકેલવા માટે ફેક્ટરી અથવા પેટા-એસેમ્બલર તરીકે કામ કરી શકે છે, આમ મુખ્ય એસેમ્બલરમાંથી કેટલીક વિગતોને અમૂર્ત બનાવે છે. તે સંદર્ભ-ગણતરી હોઈ શકે છે જેથી નિર્ભરતા જાણે કે કેટલા ગ્રાહકો તેનો ઉપયોગ કરી રહ્યા છે. જો નિર્ભરતા ગ્રાહકોનો સંગ્રહ જાળવી રાખે છે, તો તે પછીથી તે બધાને પોતાના અલગ ઉદાહરણ સાથે દાખલ કરી શકે છે. જાહેર ઈન્ટરફેસ સર્વિસસેટર {રદબાતલ સેટસર્વિસ (સેવા સેવા);} જાહેર વર્ગ ક્લાયન્ટ સર્વિસસેટરનો અમલ કરે છે [ખાનગી સેવા સેવા; @Override જાહેર રદબાતલ સેટસર્વિસ (સેવા સેવા)] {જો (સેવા = રદબાતલ) {નવો ગેરકાયદેસર દલીલ છોડો અપવાદ ("સેવા રદબાતલ ન હોવી જોઈએ");} this.service = સેવા;} સાર્વજનિક વર્ગ સર્વિસ ઇન્જેક્ટર {ખાનગી અંતિમ સેટ <સર્વિસસેટર> ક્લાયન્ટ્સ = નવું હેશસેટ <> (); જાહેર રદબાતલ ઈન્જેક્શન (સર્વિસસેટર ક્લાયન્ટ) {this.clients.add (ક્લાયન્ટ); client.setService (નવું ઉદાહરણ સેવા ();} જાહેર રદબાતલ સ્વીચ () પબ્લિક ક્લાસ પ્રોગ્રામ {પબ્લિક સ્ટેટિક વોઈડ મેઇન (શબ્દમાળા [] આરજીએસ) {// સેવાનું નિર્માણ કરો. સેવા સેવા = નવું ઉદાહરણ સેવા ();// ક્લાયન્ટમાં સેવા દાખલ કરો. ક્લાયન્ટ ક્લાયન્ટ = નવો ક્લાયન્ટ (સેવા);// વસ્તુઓનો ઉપયોગ કરો. System.out.println (client.greet ();} મેન્યુઅલ બાંધકામ વધુ જટિલ હોઈ શકે છે અને તેમાં બિલ્ડરો, કારખાનાઓ અથવા અન્ય બાંધકામ પેટર્ન સામેલ હોઈ શકે છે. ફ્રેમવર્ક મેન્યુઅલ ડિપેન્ડન્સી ઈન્જેક્શન ઘણીવાર મોટા પ્રોજેક્ટ્સ માટે કંટાળાજનક અને ભૂલ-સંભવિત હોય છે, જે પ્રક્રિયાને સ્વચાલિત કરતી ફ્રેમવર્કના ઉપયોગને પ્રોત્સાહન આપે છે. મેન્યુઅલ ડિપેન્ડન્સી ઈન્જેક્શન એક ડિપેન્ડન્સી ઈન્જેક્શન માળખું બની જાય છે જ્યારે બિલ્ડિંગ કોડ હવે એપ્લિકેશન માટે કસ્ટમ નથી અને તેના બદલે સાર્વત્રિક છે. ઉપયોગી હોવા છતાં, આ સાધનો નિર્ભરતા ઈન્જેક્શન કરવા માટે જરૂરી નથી. કેટલાક માળખાઓ, જેમ કે સ્પ્રિંગ, પ્રોગ્રામ રચનાની યોજના બનાવવા માટે બાહ્ય રૂપરેખાંકન ફાઇલોનો ઉપયોગ કરી શકે છેઃ આયાત 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 (['માય મોડ્યુલ', 'એનજી']); વાર ગ્રીટર = injector.get ('ગ્રીટર'); સર્વિસ લોકેટર એન્ટિપેટર્નને ટાળવા માટે, એંગ્યુલરજેએસ એચટીએમએલ નમૂનાઓમાં ઘોષણાત્મક સંકેતને મંજૂરી આપે છે જે ઇન્જેક્ટરમાં ઘટકો બનાવવાનું પ્રતિનિધિત્વ કરે છે. <ડિવ એનજી-કંટ્રોલર = "માય કંટ્રોલર"> <બટન એનજી-ક્લિક = "સેહેલો ()"> હેલો </બટન> </ડિવ> ફંક્શન માય કંટ્રોલર ($સ્કોપ, ગ્રીટર) {$scope.sayHello = ફંક્શન () {greeter.greet ('હેલો વર્લ્ડ');};} એનજી-કંટ્રોલર ડાયરેક્ટિવ ઇન્જેક્ટરને કંટ્રોલર અને તેની નિર્ભરતાનું ઉદાહરણ બનાવવા માટે ટ્રિગર કરે છે. સી #આ નમૂનો સી #માં કન્સ્ટ્રક્ટર ઈન્જેક્શનનું ઉદાહરણ પૂરું પાડે છે. સિસ્ટમનો ઉપયોગ કરીને; નેમસ્પેસ ડિપેન્ડન્સી ઈન્જેક્શન;// અમારા ક્લાયન્ટને ફક્ત આ ઇન્ટરફેસ વિશે જ ખબર પડશે, તે કયા ચોક્કસ ગેમપેડનો ઉપયોગ કરી રહ્યું છે તે નહીં. ઈન્ટરફેસ આઇગેમપેડ ફંક્શનાલિટી {શબ્દમાળા ગેટગેમપેડનામ (); રદબાતલ સેટવાઇબ્રેશન પાવર (ફ્લોટ પાવર);}// નીચેની સેવાઓ ઉપરોક્ત ઈન્ટરફેસનું નક્કર અમલીકરણ પ્રદાન કરે છે. વર્ગ એક્સબોક્સગેમપેડઃ આઇગેમપેડ ફંક્શનાલિટી {ફ્લોટ વાઇબ્રેશન પાવર = 1. f; સાર્વજનિક સ્ટ્રિંગ ગેટગેમપેડ નામ () => "એક્સબોક્સ નિયંત્રક"; સાર્વજનિક રદબાતલ સેટવાઇબ્રેશન પાવર (ફ્લોટ પાવર) => this.vibrationPower = Math.Clamp (પાવર, 0.0f, 1. f);} વર્ગ પ્લેસ્ટેશન જોયસ્ટિકઃ આઇગેમપેડ ફંક્શનાલિટી {ફ્લોટ વાઇબ્રેટિંગ પાવર = 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 રિફૅક્ટર યુઅર વે ટુ એ ડિપેન્ડન્સી ઇન્જેક્શન કન્ટેનર સમજવું PHP માં DI તમને ડિપેન્ડન્સી ઇન્જેક્શન કન્ટેનર ઘટક-આધારિત સોફ્ટવેર એન્જિનિયરિંગ સોફ્ટવેર આર્કિટેક્ચર સોફ્ટવેર ડિઝાઇન પેટર્નની જરૂર નથી ઉદાહરણ તરીકે જાવા કોડ સાથેના લેખો