Skip to main content

Register MonoBehaviour

Register from LifetimeScope's [SerializeField]#

[SerializeField]YourBehaviour yourBehaviour;
// ...
builder.RegisterComponent(yourBehaviour);
note

RegisterComponent are similar to RegisterInstance. The only difference is that MonoBehaviours registered with RegisterComponent will be injected even if not Resolved.

Register from scene with LifetimeScope#

builder.RegisterComponentInHierarchy<YourBehaviour>();
note

RegisterComponentInHierarchy always have a Scoped lifetime because the lifetime is equal to the scene.

Register component that Instantiate from prefab when resolving#

[SerializeField]YourBehaviour prefab;
// ...
builder.RegisterComponentInNewPrefab(prefab, Lifetime.Scoped);

Register component that with new GameObject when resolving#

builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "NewGameObjectName");

Register component as interface#

builder.RegisterComponentInHierarchy<YourBehaviour>()    .AsImplementedInterfaces();

Register component to specific parent Transform#

// Instantiate new GameObject under the specified transformbuilder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped)    .UnderTransform(parent);
// Instantiate new prefab under the specified transformbuilder.RegisterComponentInNewPrefab(prefab, Lifetime.Scoped)    .UnderTransform(parent);
// Find the component under the specified transform.builder.RegisterComponentInHierarchy<YourBehaviour>()    .UnderTransform(parent);

Or find at runtime.

builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped)    .UnderTransform(() => {        // ...        return parent;    });

Grouping MonoBehaviour's Registration#

builder.UseComponents(components =>{    components.AddInstance(yourBehaviour);    components.AddInHierarchy<YourBehaviour>();    components.AddFromNewPrefab(prefab, Lifetime.Scoped);    components.AddOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "name");});

This is the same as:

builder.RegisterComponent(yourBehaviour);builder.RegisterComponentInHierarchy<YourBehaviour>();builder.RegisterComponentFromNewPrefab(prefab, Lifetime.Scoped);builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "name");

You can create a group with a specified parent.

builder.UseComponents(parentTransform, components =>{    // GetComponentInChildren under `parentTransform`    components.AddInHierarchy<YourBehaviour>();
    // Instantiate under `parentTransform`    components.AddFromNewPrefab(prefab, Lifetime.Scoped);    components.AddOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "name");})

This is the same as:

builder.RegisterComponentInHierarchy<YourBehaviour>()    .UnderTransform(parentTransform);
builder.RegisterComponentFromNewPrefab(prefab, Lifetime.Scoped)    .UnderTransform(parentTransform);builder.RegisterComponentOnNewGameObject<YourBehaviour>(Lifetime.Scoped, "name");    .UnderTransform(parentTransform);