zenject是DI注入容器,網上的教學不算少,但可能我就笨吧看了很多文章還是很矇
實際把玩下後有稍微了解一點概念,所以先用這篇筆記一下
不會比網路文章詳盡,但應該可以讓不熟的人大概了解zenject的用途,要深入了解的話網上有很多資源可以參考
使用zenject可以簡單實現單例模式,不用自己寫個static和GetInstance,同時使用Installer也有方便管理的優點
當然還有其他功用,不過因為目前還沒有需求所以沒有特別去研究
伶乃目前的需求是要建立一個事件中心,他是唯一的存在,用來註冊和呼叫所有事件
要使用zenject必須先新增一個Installer,他有點像是窗口,你所有想要事先建立好的物件都必須放在這
Installer有分三種,老實說我現在還感覺不出他們的差異,因為SO能做到的Mono也能做到
差別只在Mono如果使用到序列化物件需要每個場景重新拉一個,所以資料我會用SO來綁定
設定大概長這樣,Container是zenject的容器,Bind<T>選擇要建立的class,AsSingle可以保證注入的class都是同一個,NonLazy可以在被注入之前就先創建好該實例
接著在場景上建立Scene Context基本設定就完成了
使用方式如圖,只需要在Field前方加上[Inject]就可以使用了,完全不需要另外賦值
之前要實作事件中心時都必須在Awake()裡面進行綁定,如此事件一多也會不好管理
使用zenject的話可以將Mono注入到建構式中,這樣就可以統一在EventHandler中管理事件
框起來的class就是拿來設定要綁定的Mono,當然也可以多設定幾個不同的EventHandler配合不同場景使用,畢竟事件都是註冊到同一個eventStore裡面
最後新增一個Zenject Binding的組件就可以綁定Mono物件了
目前都是使用在單例物件,之後有其他了解再來更新文章了