55public partial class RootComposition : MonoBehaviour
66{
77 void Setup ( ) => DI . Setup ( )
8+ . Hint ( Hint . ScopeFactoryName , "CreateScope" )
89 . DependsOn ( nameof ( ClocksComposition ) , SetupContextKind . Members )
9- . Root < Root > ( "root" ) ;
10+ . Bind < Child > ( ) . As ( Lifetime . Scoped ) . To < Child > ( )
11+ . Root < Root > ( nameof ( Root ) )
12+ . Root < Child > ( nameof ( Child ) ) ;
1013
1114 void Start ( )
1215 {
13- root . Initialize ( ) ;
16+ Root . Initialize ( ) ;
1417
15- // Игровые сцены можно загружать Additive и там будут находиться всяческие настройки
16- // Часто игровая сцена это "режим" игры, в котором есть свои настройки и свои сервисы\модули
17- // которые живут только пока сцена(режим) активны.
18- // Все сервисы в рамках жизни игры обычно являются "singleton" и должны "шариться" между
19- // всеми "режимами". В более привычных DI это называется либо Scope, либо Context.
20-
21- // var child = Object.FindAnyObjectByType<ChildComposition>();
22- // child.child.BuildUp(this); ???
18+ using var scope1 = CreateScope ( ) ;
19+ scope1 . Child . Initialize ( ) ;
2320
24- var child = new ChildComposition ( this ) ;
21+ using var scope2 = CreateScope ( ) ;
22+ scope2 . Child . Initialize ( ) ;
2523
26- child . child . Initialize ( ) ;
24+ using var scope3 = CreateScope ( ) ;
25+ scope2 . Child . Initialize ( ) ;
2726 }
2827}
2928
3029public class Root
3130{
32- private IClockService _clockService ;
31+ private readonly IClockService _clockService ;
3332
34- public Root ( IClockService clockService )
35- {
36- _clockService = clockService ;
37- }
33+ public Root ( IClockService clockService ) => _clockService = clockService ;
3834
3935 public async void Initialize ( )
4036 {
4137 await SceneManager . LoadSceneAsync ( "2. Child Scene" , LoadSceneMode . Additive ) ;
42-
43- Debug . Log ( "Root: " + _clockService . GetHashCode ( ) ) ;
38+ Debug . Log ( "Root clock: " + _clockService . GetHashCode ( ) ) ;
4439 }
4540}
0 commit comments