示例#1
0
        public void UpdateFrom(InstanceLookupBeginningMessage e)
        {
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }
            var instanceLookup = e.InstanceLookup;
            ResolveOperation resolveOperation;
            LifetimeScope    activationScope;
            Component        component;

            if (!_resolveOperations.TryGetItem(instanceLookup.ResolveOperationId, out resolveOperation) ||
                !_lifetimeScopes.TryGetItem(instanceLookup.ActivationScopeId, out activationScope) ||
                !_components.TryGetItem(instanceLookup.ComponentId, out component))
            {
                throw new InvalidOperationException("Instance lookup depends on an unknown item.");
            }

            InstanceLookup item;

            if (resolveOperation.RootInstanceLookup == null)
            {
                item = new InstanceLookup(instanceLookup.Id, resolveOperation, activationScope, component);
                resolveOperation.RootInstanceLookup = item;
                resolveOperation.InstanceLookupStack.Push(item);
            }
            else
            {
                var top = resolveOperation.InstanceLookupStack.Peek();
                item = new InstanceLookup(instanceLookup.Id, resolveOperation, activationScope, component, top);
                top.DependencyLookups.Add(item);
                resolveOperation.InstanceLookupStack.Push(item);
            }
            _instanceLookups.Add(item);
        }
示例#2
0
 static InstanceLookupViewModel BuildInstanceLookupTree(InstanceLookup instanceLookup)
 {
     return(new InstanceLookupViewModel(
                instanceLookup.Component.Description,
                Describe(instanceLookup.ActivationScope),
                !instanceLookup.SharedInstanceReused,
                instanceLookup.DependencyLookups.Select(BuildInstanceLookupTree)));
 }
示例#3
0
 public GameObject Get(string prefabName)
 {
     if (prefabName.IsNullOrEmpty())
     {
         return(null);
     }
     InstanceLookup.TryGetValue(prefabName, out GameObject instance);
     return(instance);
 }
示例#4
0
        /// <summary>
        /// Resolve an lookup of the provided registration within the context.
        /// </summary>
        /// <param name="service">Service which is trying to be resolved</param>
        /// <param name="registration">The registration.</param>
        /// <param name="parameters">Parameters for the instance.</param>
        /// <returns>
        /// The component lookup.
        /// </returns>
        /// <exception cref="ComponentNotRegisteredException"/>
        /// <exception cref="Revenj.Extensibility.Autofac.Core.DependencyResolutionException"/>
        public IInstanceLookup ResolveLookup(Service service, IComponentRegistration registration, IEnumerable <Parameter> parameters)
        {
            if (registration == null)
            {
                throw new ArgumentNullException("registration");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            InstanceLookup activation;
            var            skipCache = parameters.Any();
            var            si        = new ServiceInfo {
                Service = service, Registration = registration
            };

            if (skipCache || !_serviceCache.TryGetValue(si, out activation))
            {
                var scope = _currentResolutionScope;
                if (scope == null)
                {
                    CheckNotDisposed();
                }
                activation = new InstanceLookup(service, registration, scope, scope, parameters);
                if (!skipCache)
                {
                    _serviceCache.TryAdd(si, activation);
                }
            }

            /*else if (registration.Sharing != InstanceSharing.Shared
             *      && (activation.Preparing || activation.Activating)
             *      && Thread.CurrentThread.ManagedThreadId == activation.ThreadID)
             * {
             *      var dre = new DependencyResolutionException(CircularDependencyDetectorResources.CircularDependency);
             *      dre.Lookups.Push(activation);
             *      throw dre;
             * }*/

            return(activation);
        }
示例#5
0
 public virtual void Remove(GameObject instance)
 {
     InstanceLookup.Remove(instance.name);
     Removed?.Invoke(instance);
 }