Skip to content

Commit 06b99e3

Browse files
Use scope factory
1 parent 629a4a7 commit 06b99e3

3 files changed

Lines changed: 18 additions & 37 deletions

File tree

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,10 @@
1-
using Pure.DI;
21
using UnityEngine;
32

4-
public partial class ChildComposition
5-
{
6-
void Setup() => DI.Setup()
7-
.DependsOn(nameof(RootComposition), SetupContextKind.Argument, "parent")
8-
.Root<Child>("child");
9-
}
10-
113
public class Child
124
{
13-
private IClockService _clockService;
5+
private readonly IClockService _clockService;
146

15-
public Child(IClockService clockService)
16-
{
17-
_clockService = clockService;
18-
}
7+
public Child(IClockService clockService) => _clockService = clockService;
198

20-
public void Initialize()
21-
{
22-
Debug.Log("Child: " + _clockService.GetHashCode());
23-
}
9+
public void Initialize() => Debug.Log("Child clock: " + _clockService.GetHashCode());
2410
}

samples/UnityApp/Assets/Scripts/Example/RootComposition.cs

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,36 @@
55
public 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

3029
public 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
}

samples/UnityApp/Assets/Scripts/Scope.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ internal class ClocksComposition
1313

1414
void Setup() => DI.Setup(kind: CompositionKind.Internal)
1515
.Transient(() => clockConfig)
16-
.Singleton<ClockService>();
16+
.Scoped<ClockService>();
1717
}
1818

1919
public partial class Scope : MonoBehaviour

0 commit comments

Comments
 (0)