dingo
dingo copied to clipboard
Deadlock in SingletonScope for circular dependencies
The Circular Dependency check is unable to detect circular dependencies in singletons, as the Singleton will deadlock before the detection happens.
Testcase:
type circSingletonA struct {
B *circSingletonB `inject:""`
}
type circSingletonB struct {
A *circSingletonA `inject:""`
}
func TestCircularSingletonBinding(t *testing.T) {
EnableCircularTracing()
defer func() {
traceCircular = nil
}()
injector := NewInjector()
injector.Bind(new(circSingletonA)).In(Singleton)
injector.GetInstance(new(circSingletonA))
}