0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hamster OutputAdvent Calendar 2024

Day 6

【Unity】VContainer最近知った内容をまとめた # 2

Last updated at Posted at 2024-12-05

はじめに

この記事はHamster Output Advent Calendar 2024の6日目の記事です!

また、この記事は前回の続きです。今回はAsSelfや、インタフェース関連関連など、利用したことがある内容や、調べたことをまとめたいと思います。

参考にしたリンク

Registerを使う時に利用するAs関連

メソッドチェーンの様に、Registerの後にどんどん繋げて書くことができます!

・As

インタフェースを型にして登録することができます。ただし、登録されるのはインタフェースなので、元のクラスは登録されません。

protected override void Configure(IContainerBuilder builder)
{
    builder.Register<TestPureCSharp>(Lifetime.Singleton).As<ITestLog>();
}

・AsSelf

先ほどと同じようにインタフェースを型にして登録を行っていますが、Asの後に、AsSelfが追加されています。AsSelfを追加することで、型の取得先と、登録する型をどちらも登録することができます。

protected override void Configure(IContainerBuilder builder)
{
    builder.Register<TestPureCSharp>(Lifetime.Singleton).As<ITestLog>().AsSelf();
}

・AsImplementedInterfaces

指定した型が持っているインタフェースを全て登録します。
ここの解釈が正しいかは正直微妙だけど...おおよそは合ってると思う。

protected override void Configure(IContainerBuilder builder)
{
    builder.RegisterComponentInHierarchy<TestMonoBehaviour>().AsImplementedInterfaces();
}

VContainerにはインタフェースが沢山ある

沢山ありますがほぼUnityのライフサイクル見たいな物です。
・それぞれのインタフェースはUnityのライフサイクルと同様に実行される
・Postがついているメソッドはそのライフサイクルの後に実行される

もし、MonoBehaviourと同じ使い方をする場合、IStartableITickableを利用すると同じ動作になります。

現状、IInitializableIPostInitializableの実行されるタイミングである、PlayerLoopについてはあまり分かっていないので飛ばします。

※using VContainer.Unity;を忘れずに...!

・IInitializable

PlayerLoopのInitializationの前に実行される

public class Sample : IInitializable
{
    public void Initialize()
    {

    }
}

・IPostInitializable

PlayerLoopのInitializationの後に実行される

public class Sample : IPostInitializable
{
    public void PostInitialize()
    {

    }
}

・IStartable

MonoBehaviourのStart時に実行される

public class Sample : IStartable
{
    public void Start()
    {

    }
}

・IPostStartable

MonoBehaviourのStart後に実行される

public class Sample : IPostStartable
{
    public void PostStart()
    {

    }
}

・IFixedTickable

MonoBehaviourのFixedUpdate時に実行される

public class Sample : IFixedTickable
{
    public void FixedTick()
    {
    
    }
}

・IPostFixedTickable

MonoBehaviourのFixedUpdate後に実行される

public class Sample : IPostFixedTickable
{
    public void PostFixedTick()
    {
    
    }
}

・ITickable

MonoBehaviourのUpdate時に実行される

public class Sample : ITickable
{
    public void Tick()
    {
    
    }
}

・IPostTickable

MonoBehaviourのUpdate後に実行される

public class Sample : IPostTickable
{
    public void PostTick()
    {
    
    }
}

・ILateTickable

MonoBehaviourのLateUpdate時に実行される

public class Sample : ILateTickable
{
    public void LateTick()
    {
    
    }
}

・IPostLateTickable

MonoBehaviourのLateUpdate後に実行される

public class Sample : IPostLateTickable
{
    public void PostLateTick()
    {
    
    }
}

その他&使ったけどよく分からない

・WithParameter

Vcontainerで、生成したクラスのコンストラクタ引き数とかに特定の値を入れる時に利用するのかな...?

protected override void Configure(IContainerBuilder builder)
{
    builder.RegisterEntryPoint<TestPureCSharp>().WithParameter("a");
}

// これが呼び出してるクラス
public class TestPureCSharp : IStartable
{
    public TestPureCSharp(string message)
    {
        Debug.Log(message);
    }

    public void Start()
    {

    }
}

まとめ

・As関連を利用することで、型の取得先と登録したい型をどちらも登録できる

・VContainerのインタフェースは沢山あるけど、MonoBehaviourと同じ動作をするだけならIStartableITickableを利用する

WithParameterを使うとコンストラクタ引き数を自分で初期化できる

引き数ありのコンストラクタに、何も入れずにエラーが出たから初期化する時に利用するメソッドだと思う。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?