示例#1
0
        public virtual void ConsumeGameObject(GameObject obj)
        {
            myGameObject = obj;
            obj.SetActive(myVisible);

            OnInstanceCreated?.Invoke(obj);
        }
        private object ResolveInternal(BindingData bindingData)
        {
            if (m_BindingDatasToBuild.Contains(bindingData))
            {
                throw new InvalidOperationException("Cyclic dependencies are not supported.");
            }

            m_BindingDatasToBuild.Push(bindingData);
            var instanceType = bindingData.ImplType;

            if (!m_ServiceNameToSingletonMap.TryGetValue(bindingData.ServiceName, out object ret))
            {
                ret = Activator.CreateInstance(instanceType);
                foreach (var property in instanceType.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty))
                {
                    if (bindingData.PropertyInjections != null && bindingData.PropertyInjections.TryGetValue(property.Name, out var value))
                    {
                        property.SetValue(ret, value);
                        continue;
                    }

                    if (property.GetCustomAttribute <InjectAttribute>() == null)
                    {
                        continue;
                    }

                    var dependency = ResolveInternal((BindingData)GetBindingData(property.PropertyType));
                    property.SetValue(ret, dependency);
                }

                m_ServiceNameToSingletonMap[bindingData.ServiceName] = ret;
                m_ServicesToInit.Enqueue(bindingData.ServiceName);
                OnInstanceCreated?.Invoke(bindingData, ret);
            }

            m_BindingDatasToBuild.Pop();
            return(ret);
        }