Aurelia-এ Dependency Injection (DI) সিস্টেম ব্যবহার করে আপনি বিভিন্ন সেবা (services) এবং কম্পোনেন্টগুলিকে একে অপরের মধ্যে ইনজেক্ট করতে পারেন। এতে কোডের মডুলারিটি, পুনরায় ব্যবহারযোগ্যতা এবং টেস্টেবিলিটি বৃদ্ধি পায়। কখনও কখনও আপনার নিজের কাস্টম ইনজেক্টর তৈরি করা প্রয়োজন হতে পারে যা নির্দিষ্ট কার্যকারিতা বা কনফিগারেশন প্রদান করবে।
Aurelia-এ কাস্টম ইনজেক্টর তৈরি করার জন্য আপনাকে কেবল @injectable ডেকোরেটর এবং Container সিস্টেম ব্যবহার করতে হবে। এখানে কাস্টম ইনজেক্টরের একটি মৌলিক উদাহরণ দেওয়া হলো।
১. কাস্টম ইনজেক্টর তৈরি করা
প্রথমে একটি service বা injectable class তৈরি করুন, যা আমরা কাস্টম ইনজেক্টর হিসেবে ব্যবহার করব।
১.১ সেবা তৈরি করা (Service)
ধরা যাক, আমাদের একটি LoggerService তৈরি করতে হবে যা লগিংয়ের জন্য ব্যবহৃত হবে।
// src/logger.service.js
export class LoggerService {
log(message) {
console.log("Log message: ", message);
}
}
এখন LoggerService একটি সাধারণ ক্লাস যা একটি log মেথড প্রদান করে, যা কনসোলে মেসেজ লগ করবে।
২. কাস্টম ইনজেক্টর তৈরি করা
Aurelia-এ @injectable ডেকোরেটর ব্যবহার করে সেবা (service) বা ক্লাসকে ইনজেক্টর হিসেবে তৈরি করা হয়। এটি আমাদের LoggerService ক্লাসে যুক্ত করতে হবে, যাতে আমরা এটিকে অন্য কোথাও ইনজেক্ট করতে পারি।
২.১ LoggerService-এ @injectable ডেকোরেটর যোগ করা
// src/logger.service.js
import { inject } from 'aurelia-framework';
@inject()
export class LoggerService {
log(message) {
console.log("Log message: ", message);
}
}
এখন LoggerService ক্লাসটি @injectable হিসেবে প্রস্তুত। আমরা এই ক্লাসটিকে যেকোনো কম্পোনেন্ট বা ক্লাসে ইনজেক্ট করতে পারি।
৩. কাস্টম ইনজেক্টর ব্যবহার করা
কাস্টম ইনজেক্টর ব্যবহার করার জন্য, আপনি আপনার কম্পোনেন্ট বা ভিউমডেলে সেই সেবা ইনজেক্ট করবেন।
৩.১ LoggerService ইনজেক্ট করা
ধরা যাক, আপনার App কম্পোনেন্টে LoggerService ইনজেক্ট করতে চান।
// src/app.js
import { inject } from 'aurelia-framework';
import { LoggerService } from './logger.service';
@inject(LoggerService)
export class App {
constructor(logger) {
this.logger = logger;
}
attached() {
this.logger.log("Aurelia App Loaded Successfully!");
}
}
এখানে, LoggerService কে ইনজেক্ট করা হয়েছে App ক্লাসে। যখন অ্যাপ্লিকেশনটি লোড হবে, তখন this.logger.log() কল করা হবে এবং কনসোলে একটি মেসেজ প্রদর্শিত হবে।
৪. কাস্টম ইনজেক্টর কনফিগারেশন
Aurelia ইনজেকশন কনটেইনার ব্যবহার করে ইনজেক্টরের কনফিগারেশন করে থাকে। আপনি যদি কাস্টম কনফিগারেশন করতে চান, যেমন ইনস্ট্যান্স বা স্ট্যাটিক ডেটা ইনজেক্ট করতে চান, তবে সেটাও করা যায়।
৪.১ কাস্টম ইনজেক্টর কনফিগারেশন
// src/logger.service.js
export class LoggerService {
constructor(config) {
this.config = config || 'Default Config';
}
log(message) {
console.log(`[${this.config}] Log message: ${message}`);
}
}
এখন এই সেবা ইনজেক্ট করতে হবে, তবে ইনজেকশনে কাস্টম কনফিগারেশন পাস করতে হবে।
// src/app.js
import { inject } from 'aurelia-framework';
import { LoggerService } from './logger.service';
@inject(LoggerService)
export class App {
constructor(logger) {
this.logger = logger;
}
attached() {
this.logger.log("Custom Configured Logger Service");
}
}
এটি কাস্টম ইনজেকশনের মাধ্যমে LoggerService কনফিগারেশন মান পাস করে এবং লগ মেসেজ কনসোলে প্রদর্শন করবে।
৫. সার্ভিস কনটেইনার (Container) ব্যবহার করা
Aurelia এর Container API দিয়ে আপনি ম্যানুয়ালি ডিপেনডেন্সি ইনজেকশন করতে পারেন। এটি তখন কার্যকর হয় যখন আপনি কোনো ক্লাসের মধ্যে নির্দিষ্ট ইনজেকশন কনফিগার করতে চান।
import { Container } from 'aurelia-framework';
import { LoggerService } from './logger.service';
const container = new Container();
const logger = container.get(LoggerService);
logger.log("LoggerService instantiated manually!");
এটি আপনার সার্ভিস কন্টেইনারকে ব্যবহার করে LoggerService এর ইনস্ট্যান্স তৈরি করবে এবং লগ মেসেজটি কনসোলে দেখাবে।
উপসংহার
Aurelia-এ কাস্টম ইনজেক্টর তৈরি করা খুবই সহজ এবং আপনাকে @inject ডেকোরেটর ব্যবহার করতে হবে। আপনি কাস্টম ইনজেক্টর ব্যবহার করে আপনার অ্যাপ্লিকেশনের ডিপেনডেন্সি ইনজেকশন সিস্টেম আরও শক্তিশালী এবং মডুলার করতে পারেন। এটি কোডের পুনরায় ব্যবহারযোগ্যতা, মডুলারিটি এবং টেস্টেবিলিটি বাড়াতে সহায়তা করে।
Read more