#region using System; using Svelto.DataStructures; using UnityEngine; #endregion namespace Svelto.Context.Legacy { public class MonoBehaviourFactory : Factories.IMonoBehaviourFactory { public MonoBehaviourFactory(IUnityContextHierarchyChangedListener unityContext) { _unityContext = new WeakReference(unityContext); } public M Build(Func constructor) where M : MonoBehaviour { DesignByContract.Check.Require(_unityContext.IsAlive == true, "Context is used, but not alive"); var mb = constructor(); _unityContext.Target.OnMonobehaviourAdded(mb); GameObject go = mb.gameObject; if (go.GetComponent() == null) go.AddComponent().unityContext = _unityContext; return mb; } WeakReference _unityContext; } }