早くて軽いDI libraryの VContainer、とても使いやすいので最近のお気に入りです。
MonoBehaviourのComponentを登録するとエラーになることがある
builder.RegisterComponentInHierarchy<FooComponent>().AsImplementedInterfaces();
このようにRegisterComponentInHierarchy
を使ってInterfaceを登録しようとすると、 VContainerException: No such registration of type: FooComponentとエラーが出てしまいます。
これを、
builder.RegisterComponentInHierarchy<FooComponent>().AsSelf().AsImplementedInterfaces();
このようにAsSelf()
を追加することで登録できるようになります。
この問題のIssueは立っていたのですが、立てた方がこの解決方法だけ書いてcloseしていたのでバグというわけではない……? 多分。
それから別記事に書くほどでもないメモをもう一つ。
コンストラクタの引数に IEnumeratble<T>
を指定して、ParentのLifetimeScopeにあるT
を探してもらおうとしても、実際には自分自身のLifetimeScopeにないと空の IEnumerableが代入されてしまいます。親やその上のLifetimeScopeを探してほしいときはコンストラクタの引数をT
にした方が良さそうです。
参考
https://githubmemory.com/repo/hadashiA/VContainer/issues/278