angular - 6 কৌণিক 6 এ পরিষেবাগুলি তৈরি করার সময় ইনজেকশনযোগ্য ডিকোয়টারের সাথে সরবরাহের উদ্দেশ্য কী?




angular6 (4)

কৌণিক সিএলআই-এ পরিষেবাগুলি তৈরি করার সময়, এটি ইনজেকটেবল ডিকোরিটারের জন্য 'রুট' এর একটি ডিফল্ট সম্পত্তি হিসাবে 'প্রদত্ত' সম্পত্তি সহ অতিরিক্ত মেটাডেটা যুক্ত করছে।

@Injectable({
  providedIn: 'root',
})

সরবরাহ করা ঠিক কি করে? আমি ধরে নিচ্ছি যে এটি পুরো অ্যাপ্লিকেশনটির জন্য 'গ্লোবাল' টাইপের সিঙ্গেলটন পরিষেবার মতো পরিষেবাটি সরবরাহ করছে, তবে, অ্যাপমোডুলের সরবরাহকারী অ্যারেতে এই জাতীয় পরিষেবাদি ঘোষণা করা কি আরও পরিষ্কার হবে না?

হালনাগাদ:

অন্য কারও জন্য, নিম্নলিখিত অনুচ্ছেদে এটির আরও একটি ভাল ব্যাখ্যা সরবরাহ করেছে, বিশেষত যদি আপনি কেবল একটি বৈশিষ্ট্য মডিউলে আপনার পরিষেবা সরবরাহ করতে চান।

নতুন providedIn @Injectable() ব্যবহার করে সরাসরি @Injectable() অভ্যন্তরে কোনও সরবরাহকারীকে রেজিস্ট্রেশন করার একটি নতুন, প্রস্তাবিত, উপায় রয়েছে। এটি 'root' কে আপনার অ্যাপ্লিকেশনটির কোনও মান বা কোনও মডিউল হিসাবে গ্রহণ করে। আপনি যখন 'root' ব্যবহার করবেন, তখন আপনার injectable অ্যাপ্লিকেশনটিতে একটি সিঙ্গলটন হিসাবে নিবন্ধিত হবে এবং আপনাকে এটি রুট মডিউলটির সরবরাহকারীদের সাথে যুক্ত করার দরকার নেই। একইভাবে, আপনি যদি providedIn: UsersModule ব্যবহার করেন providedIn: UsersModule মডিউলের providers সাথে যুক্ত না করেই UsersModule সরবরাহকারী হিসাবে নিবন্ধিত হয় "" - https://blog.ninja-squad.com/2018/05/04/what-is-new-angular-6/

আপডেট 2:

আরও তদন্তের পরে, আমি সিদ্ধান্ত নিয়েছি যে এটি সরবরাহ করা কেবলমাত্র কার্যকর providedIn: 'root'

আপনি যদি রুট মডিউল ব্যতীত অন্য কোনও মডিউলে কোনও পরিষেবা সরবরাহ করতে চান, তবে আপনি বৈশিষ্ট্য মডিউলটির সজ্জকারগুলিতে providers অ্যারে ব্যবহার করা ভাল, অন্যথায় আপনি বৃত্তাকার নির্ভরতা নিয়ে জর্জরিত হবেন। এখানে আকর্ষণীয় আলোচনা হওয়া দরকার - https://github.com/angular/angular-cli/issues/10170


আপনি যদি সরবরাহিত ইন ব্যবহার করেন তবে ইনজেকটেবলটি মডিউল সরবরাহকারীদের সাথে যোগ না করে মডিউল সরবরাহকারী হিসাবে নিবন্ধিত হয়।

Docs থেকে

পরিষেবাটি নিজেই একটি শ্রেণি যা সিএলআই তৈরি করেছে এবং এটি @ ইনজেক্টেবল দ্বারা সজ্জিত। ডিফল্টরূপে, এই সজ্জা প্রদানকারী একটি সরবরাহকৃত সম্পত্তি দিয়ে কনফিগার করা হয়, যা পরিষেবার জন্য সরবরাহকারী তৈরি করে। এই ক্ষেত্রে, সরবরাহিত ইন: 'রুট' নির্দিষ্ট করে যে পরিষেবাটি রুট ইনজেক্টারে সরবরাহ করা উচিত।


সরবরাহকৃত কৌণিককে বলে যে রুট ইনজেক্টর আপনার পরিষেবার একটি উদাহরণ তৈরি করার জন্য দায়বদ্ধ। যে পরিষেবাগুলি এইভাবে সরবরাহ করা হয় সেগুলি স্বয়ংক্রিয়ভাবে পুরো অ্যাপ্লিকেশনটিতে উপলব্ধ হয়ে যায় এবং কোনও মডিউলে তালিকাভুক্ত করার প্রয়োজন হয় না।

পরিষেবা ক্লাসগুলি তাদের নিজস্ব সরবরাহকারী হিসাবে কাজ করতে পারে যার কারণে @ ইনজেক্টেবল ডেকরেটারে এগুলি সংজ্ঞায়িত করা আপনার প্রয়োজনীয় রেজিস্ট্রেশন।


providedIn: 'root' কৌণিক 6 এর পর থেকে পরিষেবা সরবরাহের জন্য providedIn: 'root' হ'ল সহজ এবং সবচেয়ে কার্যকর উপায়:

  1. পরিষেবাটি মডিউলের সরবরাহকারী অ্যারেতে (অ্যাংুলার <= 5 এর মতো) যুক্ত করার প্রয়োজন নেই এমন একটি সিঙ্গলটন হিসাবে প্রশস্ত অ্যাপ্লিকেশন উপলব্ধ হবে।
  2. যদি পরিষেবাটি কেবল অলস লোডযুক্ত মডিউলটির মধ্যে ব্যবহার করা হয় তবে এটি মডিউলটি দিয়ে অলস হবে
  3. যদি এটি কখনও ব্যবহার না করা হয় তবে এটি বিল্ড (গাছের কাঁপানো) এর মধ্যে থাকবে না।

আরও তথ্যের জন্য documentation এবং এনজিএমডিউল এফএকিউগুলি বিবেচনা করুন

BTW:

  1. আপনি যদি অ্যাপ্লিকেশন-বিস্তৃত সিঙ্গলটন না চান তবে পরিবর্তে কোনও উপাদান সরবরাহকারীর অ্যারে ব্যবহার করুন।
  2. আপনি যদি সুযোগটি সীমাবদ্ধ করতে চান তবে অন্য কোনও বিকাশকারী কখনও কোনও নির্দিষ্ট মডিউলের বাইরে আপনার পরিষেবা ব্যবহার না করে, পরিবর্তে এনজিএমডুলের সরবরাহকারীর অ্যারে ব্যবহার করুন।

ডক্স থেকে

ইনজেকটেবল সাজসজ্জা কী?

সৃষ্টির জন্য ইনজেক্টর হিসাবে উপলব্ধ একটি শ্রেণিকে চিহ্নিত করে।

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class UserService {
}

পরিষেবাটি নিজেই একটি শ্রেণি যা সিএলআই তৈরি করেছে এবং এটি @ ইনজেক্টেবল () দ্বারা সজ্জিত।

সরবরাহ করা ঠিক কি করে?

কোন এনজেক্টর ইনজেক্টেবল সরবরাহ করবে তা নির্ধারণ করে, হয় এটি একটি @ এনজিএমডিউল বা অন্য ইনজেক্টর টাইপের সাথে যুক্ত করে বা এই ইনজেকটেবলটি 'রুট' ইনজেক্টারে সরবরাহ করা উচিত, যা বেশিরভাগ অ্যাপ্লিকেশনগুলিতে অ্যাপ্লিকেশন-স্তরের ইনজেক্টর হবে।

providedIn: Type<any> | 'root' | null

সরবরাহিত ইন: 'রুট'

আপনি যখন পরিষেবাটি মূল স্তরে সরবরাহ করেন, কৌণিক একটি একক, ভাগ করে নেওয়া সার্ভিসের উদাহরণ তৈরি করে এবং এটির জন্য জিজ্ঞাসা করা কোনও শ্রেণিতে এটি সংক্রামিত করে। @ ইনজেক্টেবল () মেটাডেটাতে সরবরাহকারীর নিবন্ধন করায় অ্যাংুলার কোনও অ্যাপ্লিকেশনটি সংযোগযুক্ত অ্যাপ্লিকেশনটি যদি এটি ব্যবহার না করা হয় তবে এটি অপসারণ করে অনুকূলিত করতে দেয়।

প্রদত্ত ইন: মডিউল

এটি নির্দিষ্ট করে বলাও সম্ভব যে কোনও নির্দিষ্ট @ এনজিএমডিউলে কোনও পরিষেবা সরবরাহ করা উচিত। উদাহরণস্বরূপ, আপনি যদি অ্যাপ্লিকেশনগুলিতে পরিষেবা তৈরি না করতে চান তবে তারা আপনার তৈরি মডিউলটি আমদানি করে, আপনি নির্দিষ্ট করতে পারেন যে পরিষেবাটি মডিউলে সরবরাহ করা উচিত

import { Injectable } from '@angular/core';
import { UserModule } from './user.module';

@Injectable({
  providedIn: UserModule,
})
export class UserService {
}

এই পদ্ধতিটিকে প্রাধান্য দেওয়া হয়েছে কারণ এটি যদি কোনও কিছু সংক্রামিত না করে তবে সেবার গাছের কাঁপানো সক্ষম করে।

কোন মডিউলটি এটি সরবরাহ করতে হবে সেসে যদি সেটি নির্দিষ্ট করা সম্ভব না হয় তবে আপনি মডিউলটির মধ্যে পরিষেবাটির সরবরাহকারীও ঘোষণা করতে পারেন:

import { NgModule } from '@angular/core';
import { UserService } from './user.service';

@NgModule({
  providers: [UserService],
})
export class UserModule {
}