33 lines
1.1 KiB
Go
33 lines
1.1 KiB
Go
|
|
//go:build wireinject
|
||
|
|
|
||
|
|
package main
|
||
|
|
|
||
|
|
import "github.com/google/wire"
|
||
|
|
|
||
|
|
// InitializeEventBus — попытка собрать граф с циклической зависимостью.
|
||
|
|
//
|
||
|
|
// EventBus → NotificationService → UserService → AuthService → EventBus
|
||
|
|
//
|
||
|
|
// Wire сделает топологическую сортировку, обнаружит цикл и упадёт.
|
||
|
|
// Ленивой инициализации нет — Wire должен знать порядок создания заранее.
|
||
|
|
// А при цикле порядка не существует.
|
||
|
|
//
|
||
|
|
// Запустите: task generate-wire-broken
|
||
|
|
// Результат: "cycle for *EventBus"
|
||
|
|
func InitializeEventBus() (*EventBus, error) {
|
||
|
|
wire.Build(
|
||
|
|
NewEventBus,
|
||
|
|
NewAuthService,
|
||
|
|
NewUserService,
|
||
|
|
NewNotificationService,
|
||
|
|
|
||
|
|
wire.Bind(new(NotificationSender), new(*NotificationService)),
|
||
|
|
wire.Bind(new(EventPublisher), new(*EventBus)),
|
||
|
|
wire.Bind(new(EventSubscriber), new(*EventBus)),
|
||
|
|
wire.Bind(new(Auth), new(*AuthService)),
|
||
|
|
wire.Bind(new(Users), new(*UserService)),
|
||
|
|
)
|
||
|
|
|
||
|
|
return nil, nil
|
||
|
|
}
|