Xizmat Konteyneri
Kirish
Goravel xizmat konteyneri sinf bog'liqliklarini boshqarish va bog'liqlik in'ektsiyasini amalga oshirish uchun kuchli vosita hisoblanadi. U Goravelning barcha modullarini o'z ichiga oladi va sizga o'z xizmatlaringizni konteynerga bog'lash va kerak bo'lganda ularni hal qilish imkonini beradi. Xizmat konteyneri Goravel atrofidagi uchinchi tomon paketlari uchun kuchli qo'llab-quvvatlashni ta'minlaydi.
Bog'lash
Oddiy bog‘lamalar
Sizning xizmat konteyneringiz bog‘lanishlarining deyarli barchasi xizmat provayderlari ichida ro‘yxatdan o‘tkaziladi. Xizmat ko'rsatuvchi provayder ichida siz har doim konteynerga app parametri orqali kirishingiz mumkin, so'ngra Bind metodidan foydalanib bog'lashni ro'yxatdan o'tkazing, ro'yxatdan o'tkazmoqchi bo'lgan keyni va sinf namunasini qaytaruvchi yopilishni (closure) o'tkazing:
package route
import (
"github.com/goravel/framework/contracts/foundation"
)
const Binding = "goravel.route"
type ServiceProvider struct {}
func (route *ServiceProvider) Register(app foundation.Application) {
app.Bind(Binding, func(app foundation.Application) (any, error) {
return NewRoute(app.MakeConfig()), nil
})
}
func (route *ServiceProvider) Boot(app foundation.Application) {}Aytilganidek, odatda siz xizmat ko'rsatuvchi provayderlar ichida konteyner bilan ishlaysiz; biroq, agar siz xizmat ko'rsatuvchi provayderdan tashqarida konteyner bilan ishlashni istasangiz, App fasad orqali buni amalga oshirishingiz mumkin:
facades.App().Bind("key", func(app foundation.Application) (any, error) {
...
})Singleton bog'lash
Singleton usuli sinf yoki interfeysni konteynerga bir marta hal qilinishi kerak bo'lgan holda bog'laydi. Bir marta singleton bog'lash hal qilingandan so'ng, konteynerga keyingi chaqiruvlarda bir xil ob'ekt namunasi qaytariladi:
app.Singleton(kalit, func(app foundation.Application) (any, error) {
return NewGin(app.MakeConfig()), nil
})Instanslarni bog'lash
Shuningdek, siz Instance usuli yordamida mavjud obyekt namunasini konteynerga bog‘lashingiz mumkin. Berilgan instansiya har doim konteynerga keyingi chaqiruvlarda qaytariladi:
app.Instance(key, instance)Parametr bilan bog'lash
Agar xizmat provayderini yaratish uchun qo'shimcha parametrlar kerak bo'lsa, BindWith metodidan foydalanib, parametrlarni yopishga o'tkazishingiz mumkin:
app.BindWith(Binding, func(app foundation.Application, parameters map[string]any) (any, error) {
return NewRoute(app.MakeConfig()), nil
})Hal qilish
Make usuli
Siz konteynerdan sinf namunasini hal qilish uchun Make metodidan foydalanishingiz mumkin. Make usuli siz hal qilmoqchi bo'lgan key ni qabul qiladi:
instance, err := app.Make(key)Agar siz xizmat ko'rsatuvchi provayderdan tashqarida bo'lsangiz va kod joylashgan joyda app o'zgaruvchisiga kirish imkoni bo'lmasa, konteynerdan klass misolini olish uchun App fasadidan foydalanishingiz mumkin:
instance, err := facades.App().Make(key)MakeWith metodi
Agar sinfingizning ba'zi bog'liqliklari konteyner orqali hal qilinmasa, ularni BindWith bog'lash usuliga mos ravishda MakeWith usuliga assotsiativ massiv sifatida o'tkazib, ularni kiritishingiz mumkin:
instance, err := app.MakeWith(key, map[string]any{"id": 1})Boshqa uslublar
Framework turli fasadlarni tez hal qilish uchun qulay usullarni taqdim etadi: MakeArtisan, MakeAuth va boshqalar.
