子スコープの生成(コードファースト)
Child can also be generated from your C# code.
class LevelLoader{ readonly LifetimeScope currentScope;
LifetimeScope instantScope;
public LevelLoader(LifetimeScope lifetimeScope) { currentScope = lifetimeScope; }
public void Load() { // ... Loading some assets with any async way you like // // await Addressables.LoadAssetAsync... //
// Create a child scope for the container that contains this LevelLoader instance. instantScope = currentScope.CreateChild();
// Create with LifetimeScope prefab instantScope = currentScope.CreateChildFromPrefab( lifetimeScopePrefab);
// Create with LifetimeScope prefab and extra registrations instantScope = currentScope.CreateChildFromPrefab( lifetimeScopePrefab, builder => { builder.RegisterInstance(someExtraAsset); builder.RegisterEntryPoint<ExtraEntryPoint>(); // ... });
// Create a child scope with extra registrations instantScope = currentScope.CreateChild(builder => { // ... });
// Create a child scope with extra registrations via `IInstaller` instantScope = currentScope.CreateChild(extraInstaller);
// The additionally registered entry point runs immediately after the scope is created...
// Or you can use scoped instance directly. var foo = instantScope.Container.Resolve<Foo>(); }
public void Unload() { // Note that the scope implicitly create `LifetimeScope`. // Use `Dispose` to safely destroying the scope. instantScope.Dispose();
// ... Unloading some assets }}