Skip to main content

Generate child scope with code first

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