Angular Advanced DI

மேம்பட்ட சார்பு உட்செலுத்தலைக் கற்றுக்கொள்ளுங்கள்

Angular Advanced DI

Angular-ல் மேம்பட்ட சார்பு உட்செலுத்தல் மென்மையான கட்டமைப்புகளை உருவாக்க படிநிலை injectors, தனிப்பட்ட InjectionToken, விருப்பமான மற்றும் பல வழங்குநர்கள் மற்றும் செயல்பாடு-பாணி inject() முறையைப் பயன்படுத்துகிறது.

சார்பு உட்செலுத்தல் என்பது Angular-ன் மைய வடிவமைப்பு முறைகளில் ஒன்றாகும், இது கூறுகள் தங்கள் சார்புகளை வெளிப்படையாகக் கோர அனுமதிக்கிறது, இது கட்டமைப்பை சுருக்குகிறது மற்றும் சோதனை செய்வதை எளிதாக்குகிறது.

Advanced DI Essentials

வரம்பு: படிநிலை injectors என்பது பயன்பாடு/பாதை/கூறு நிலைகளில் உள்ள வழங்குநர்கள் நிகழ்வுகள் எங்கு வாழ்கின்றன என்பதை வரையறுக்கின்றன.

டோக்கன்கள்: வகுப்பு அல்லாத மதிப்புகள் மற்றும் கட்டமைப்பிற்கு InjectionToken பயன்படுத்தவும்.

செயல்பாடு inject: உருவாக்கிகளில் அல்லது பயன்பாட்டு செயல்பாடுகளில் inject() பயன்படுத்தவும்.

விருப்பமான & பல: விருப்பமான சார்புகள் மற்றும் பல வழங்குநர்கள் மென்மையான கலவையை செயல்படுத்துகின்றன.

Advanced DI Setup

import { InjectionToken, inject, Optional } from '@angular/core';

// Tokens
export const CONFIG = new InjectionToken<{ api: string }>('CONFIG');
export const FEATURES = new InjectionToken<string[]>('FEATURES');

// Optional inject
const cfg = inject(CONFIG, { optional: true });

// Multi providers
bootstrapApplication(App, {
  providers: [
    { provide: CONFIG, useValue: { api: '/api' } },
    { provide: FEATURES, useValue: 'search', multi: true },
    { provide: FEATURES, useValue: 'share', multi: true },
  ]
});

🔍குறியீடு விளக்கம்:

InjectionToken: வகுப்பு அல்லாத மதிப்புகள் மற்றும் கட்டமைப்பிற்கான ஒரு வகைப்படுத்தப்பட்ட டோக்கனை வரையறுக்கிறது.

inject(TOKEN, { optional: true }): ஒரு சார்பை மீட்டெடுக்கிறது மற்றும் காணாமல் போகும்போது null/undefined வழங்குகிறது.

multi: true: ஒரே டோக்கனுக்கு பல வழங்குநர் மதிப்புகளை ஒரு வரிசையில் சேகரிக்கிறது.

💡Jassif Team குறிப்புகள்:

சேவைகள் & DI, ரவுட்டர், மற்றும் பயன்பாடு பூட்ஸ்ட்ராப் பற்றி காண்க.

கட்டமைப்பிற்கு InjectionToken பயன்படுத்தவும், பயன்பாட்டு செயல்பாடுகளில் செயல்பாடு-பாணி inject() பயன்படுத்தவும், மற்றும் முடிந்தவரை பாதைகள்/கூறுகளுக்கு வழங்குநர்களை நோக்குநிலைப்படுத்தவும்.

முக்கியமானது: Angular-ன் DI அமைப்பு பயன்பாடுகளை மிகவும் மாடுலர் மற்றும் சோதனை செய்யக்கூடியதாக ஆக்குகிறது.

Advanced DI Example

Multi Providers Example

import { bootstrapApplication } from '@angular/platform-browser';
import { Component, InjectionToken, inject } from '@angular/core';

const FEATURES = new InjectionToken<string[]>('FEATURES');

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <h3>DI: Multi Providers</h3>
    <p>Features: {{ features.join(', ') }}</p>
  `
})
class App {
  features = inject(FEATURES);
}

bootstrapApplication(App, {
  providers: [
    { provide: FEATURES, useValue: 'search', multi: true },
    { provide: FEATURES, useValue: 'share', multi: true },
    { provide: FEATURES, useValue: 'ai', multi: true }
  ]
});

🔍எடுத்துக்காட்டு விளக்கம்:

FEATURES token: வழங்குநர்களால் பங்களிக்கப்பட்ட சரங்களை தொகுக்கும் பல வழங்குநர் டோக்கன்.

inject(FEATURES): ரன்டைமில் தொகுக்கப்பட்ட வரிசையைப் படிக்கிறது.

Display: டெம்ப்ளேட் அம்சங்களை காற்புள்ளி பிரிக்கப்பட்ட பட்டியலில் இணைக்கிறது.

சிறந்த நடைமுறைகள்:

வகைகளை விட டோக்கன்கள்: வகுப்புகளுக்கு அல்ல, மதிப்புகள் மற்றும் இடைமுகங்களுக்கு InjectionToken பயன்படுத்தவும்.

பல வழங்குநர்கள்: ஒரு டோக்கனின் கீழ் பல பங்களிப்புகளை சேகரிக்க multi: true சேர்க்கவும்.

வரம்பு வழங்குநர்கள்: தனிமைப்படுத்துதல் தேவைப்படும்போது root-க்கு பதிலாக பாதைகள்/கூறுகளில் வழங்க பயன்படுத்தவும்.

மையப்படுத்தப்பட்ட கட்டமைப்பு: பயன்பாட்டு-அகலமான அமைப்புகளை InjectionToken-கள் மூலம் மேலாண்மை செய்யவும்.

Optional and Multi Providers

ஒரு சார்பு தேவையில்லாதபோது @Optional() அல்லது inject(TOKEN, { optional: true }) பயன்படுத்தவும்.

பல வழங்குநர்கள் பல மதிப்புகள் ஒரே டோக்கனுக்கு பங்களிக்க அனுமதிக்கின்றன.

Optional DI Setup

import { InjectionToken, inject, Optional } from '@angular/core';

export const USER_NAME = new InjectionToken<string>('USER_NAME');

// Constructor optional
constructor(@Optional() public maybeName?: string) {}

// Function optional
const name = inject(USER_NAME, { optional: true });

Complete Example

import { bootstrapApplication } from '@angular/platform-browser';
import { Component, InjectionToken, inject } from '@angular/core';

const USER_NAME = new InjectionToken<string>('USER_NAME');
const FEATURES = new InjectionToken<string[]>('FEATURES');

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <h3>Optional & Multi</h3>
    <p>Hello: {{ name || 'Anonymous' }}</p>
    <p>Features: {{ features?.join(', ') || '∅' }}</p>
  `
})
class App {
  name = inject(USER_NAME, { optional: true });
  features = inject(FEATURES, { optional: true });
}

bootstrapApplication(App, {
  providers: [
    // Try commenting USER_NAME to see optional behavior
    { provide: USER_NAME, useValue: 'Dana' },
    { provide: FEATURES, useValue: 'search', multi: true },
    { provide: FEATURES, useValue: 'share', multi: true },
  ]
});

🔍எடுத்துக்காட்டு விளக்கம்:

Optional inject: inject(USER_NAME, { optional: true }) வழங்கப்படும் போது ஒரு மதிப்பை வழங்குகிறது அல்லது இல்லாதபோது null/undefined வழங்குகிறது.

பல வழங்குநர்கள்: பல FEATURES உள்ளீடுகள் ஒரு வரிசையில் இணைக்கப்படுகின்றன.

இயல்புநிலைகள்: விருப்பமான மதிப்புகள் காணாமல் போகும்போது டெம்ப்ளேட் இயல்புநிலைகளைக் காட்டுகிறது.

விருப்பமான சார்புகள்: ஒரு சார்பு விருப்பமானதாக இருக்கும்போது எப்போதும் null கையாளவும்
மோதல்களைத் தவிர்க்கவும்: அம்சங்கள் முழுவதும் தற்செயலான மறுபயன்பாட்டைத் தடுக்க டோக்கன்களைத் தெளிவாக பெயரிடவும்
கட்டமைப்பு முறை: டோக்கன்களுடன் உலகளாவிய அமைப்புகளை மாதிரியாக்கவும் மற்றும் தேவைக்கேற்ப ஒவ்வொரு பாதை/கூறுக்கும் மேலெழுதவும்
படிநிலை உட்செலுத்தல்: தனிப்பட்ட சூழல்களுக்கு பயன்பாடு, பாதை, மற்றும் கூறு நிலை வழங்குநர்களை பயன்படுத்தவும்

DI Patterns Comparison

முறை பயன் கூறு செயலாக்கம்
InjectionToken கட்டமைப்பு மதிப்புகள், வகுப்பு அல்லாத சார்புகள் new InjectionToken('TOKEN_NAME')
Optional Dependencies கிடைக்காத அம்சங்கள் inject(TOKEN, {optional: true}) or @Optional()
Multi Providers பல பங்களிப்புகளை சேகரித்தல் {provide: TOKEN, useValue: X, multi: true}
Hierarchical Injectors பாதை/கூறுக்கு ஸ்கோப் செய்யப்பட்ட சேவைகள் providers array in component/route
Function inject() பயன்பாட்டு செயல்பாடுகள், அமைப்பு செயல்பாடுகள் const service = inject(Service)
Factory Providers சிக்கலான உருவாக்க தர்க்கம் {provide: TOKEN, useFactory: () => new Service()}

📊DI முறைகள் பயன்பாடு:

Angular-ன் மேம்பட்ட DI அம்சங்கள் நெகிழ்வான மற்றும் பராமரிக்கக்கூடிய பயன்பாடுகளை உருவாக்க உதவுகின்றன:

  • InjectionToken: வகுப்புகளுடன் கட்டுப்படுத்தப்படாத மதிப்புகளுக்கு பயன்படுத்தவும்
  • Optional DI: பயன்பாடுகள் தேவையில்லாத அம்சங்களுக்கு
  • Multi Providers: பயன்பாட்டு விரிவாக்கத்திற்கு சிறந்தது
  • Hierarchical DI: தனிமைப்படுத்தப்பட்ட சூழல்களுக்கு

Advanced DI Quiz

ஒரு வகுப்புடன் இணைக்கப்படாத DI கட்டமைப்பு மதிப்புகளுக்கு நீங்கள் எதைப் பயன்படுத்த வேண்டும்?

InjectionToken
✓ சரி! InjectionToken என்பது Angular DI-ல் கட்டமைப்பு மதிப்புகள் மற்றும் வகுப்பு அல்லாத சார்புகளுக்காக வடிவமைக்கப்பட்டது
OpaqueToken
✗ தவறு! OpaqueToken Angular-ல் காலாவதியாக்கப்பட்டது; அதற்கு பதிலாக InjectionToken பயன்படுத்தவும்
AbstractClass
✗ தவறு! Abstract classes வகுப்பு படிநிலைகளுக்கு, கட்டமைப்பு மதிப்புகளுக்கு அல்ல

Angular-ல் பல வழங்குநர்கள் பல மதிப்புகளை ஒரே டோக்கனுக்கு சேகரிக்க என்ன பயன்படுத்தப்படுகிறது?

multi: true விருப்பம்
✓ சரி! multi: true விருப்பம் பல வழங்குநர்களை ஒரே டோக்கனுக்கு சேகரிக்க பயன்படுகிறது
optional: true விருப்பம்
✗ தவறு! optional: true விருப்பம் விருப்பமான சார்புகளுக்கு பயன்படுகிறது, பல மதிப்புகள் சேகரிப்பிற்கு அல்ல
provideMany() முறை
✗ தவறு! Angular-ல் provideMany() என்ற முறை இல்லை
அடுத்தது