Example #1
0
        public override TImpl ResolveTypedInstance()
        {
            var injector = InjectorCache.GetOrCreateInjector(typeof(TImpl));
            var instance = injector.CreateInstance <TImpl>(diContainer);

            return(instance);
        }
Example #2
0
        private void AddInjectorDependencies(InjectionKey injected)
        {
            var injector = InjectorCache.GetOrCreateInjector(injected.InjectedResourceType);

            foreach (var dependsOn in injector.DependsOn)
            {
                AddDependency(injected, dependsOn, false);
            }
        }
Example #3
0
        public virtual IRegistration Build()
        {
            var injector = InjectorCache.GetOrBuild(ImplementationType);

            return(new Registration(
                       ImplementationType,
                       Lifetime,
                       InterfaceTypes,
                       Parameters,
                       injector));
        }
Example #4
0
        public override IRegistration Build()
        {
            var injector = InjectorCache.GetOrBuild(ImplementationType);

            return(new SystemRegistration(
                       ImplementationType,
                       InterfaceTypes,
                       Parameters,
                       injector,
                       worldName,
                       systemGroupType));
        }
        public override IRegistration Build()
        {
            var injector    = InjectorCache.GetOrBuild(ImplementationType);
            var destination = new ComponentDestination(prefab, parent, parentFinder, gameObjectName);

            return(new ComponentRegistration(
                       ImplementationType,
                       Lifetime,
                       InterfaceTypes,
                       Parameters,
                       injector,
                       destination));
        }
Example #6
0
        public void CircularDependency()
        {
            var builder = new ContainerBuilder();

            builder.Register <HasCircularDependency1>(Lifetime.Transient);
            builder.Register <HasCircularDependency2>(Lifetime.Transient);

            var injector = InjectorCache.GetOrBuild(typeof(HasCircularDependency1));

            // Only reflection mode can detect circular dependency errors at runtime.
            if (injector is ReflectionInjector)
            {
                // Assert.Throws<AggregateException>(() => builder.Build());
                Assert.Throws <VContainerException>(() => builder.Build(),
                                                    "Circular dependency detected! type: VContainer.Tests.HasCircularDependency1");
            }
        }
Example #7
0
        public void TestInjectorCache()
        {
            InjectorCache.ClearCache();

            //Should reuse the first instance of an injector
            var instance = InjectorCache.GetOrCreateInjector(typeof(IInterface));

            Assert.IsNotNull(instance, "Injector instance should not be null");
            Assert.AreEqual(1, InjectorCache.CachedInjectorCount);
            var secondInstance = InjectorCache.GetOrCreateInjector(typeof(IInterface));

            Assert.AreEqual(1, InjectorCache.CachedInjectorCount);
            Assert.IsTrue(ReferenceEquals(instance, secondInstance), "Should reuse injector instance!");

            //Clear should reset to zero
            InjectorCache.ClearCache();
            Assert.AreEqual(0, InjectorCache.CachedInjectorCount);
        }
Example #8
0
        public void Inject(object instance, params IInjectParameter[] parameters)
        {
            var injector = InjectorCache.GetOrBuild(instance.GetType());

            injector.Inject(instance, this, parameters);
        }
Example #9
0
        public void Inject(object instance)
        {
            var injector = InjectorCache.GetOrBuild(instance.GetType());

            injector.Inject(instance, this, null);
        }
        private void InjectObject(object targe, IDictionary <Type, object> tempDependencys, IDictionary <string, GameObject> tempGameObjectDependencys)
        {
            InjectorCache cache;
            var           type = targe.GetType();

            if (!injectorCache.TryGetValue(type, out cache))
            {
                var             methodInfo = type.GetMethod("Construct", BindingFlags.Public | BindingFlags.Instance);
                ParameterInfo[] parameters = null;
                if (methodInfo != null && (parameters = methodInfo.GetParameters()).Length != 0)
                {
                    cache = new InjectorCache(methodInfo, parameters);
                }

                injectorCache.Add(type, cache);
            }

            if (cache == null)
            {
                return;
            }

            var args = new object[cache.Parameters.Length];
            var missingParameters = new List <ParameterInfo>(cache.Parameters.Length);

            for (int i = 0; i < args.Length; i++)
            {
                var parameter = cache.Parameters[i];

                var isGameObject = parameter.ParameterType == typeof(GameObject);

                args[i] = isGameObject ?
                          this.GetGameObject(parameter.Name) :
                          this.Get(parameter.ParameterType);

                if (args[i] != null)
                {
                    continue;
                }

                if (isGameObject && tempGameObjectDependencys != null)
                {
                    GameObject temp = null;
                    if (tempGameObjectDependencys.TryGetValue(parameter.Name, out temp))
                    {
                        args[i] = temp;
                        continue;
                    }
                }
                else if (tempDependencys != null)
                {
                    object temp = null;
                    if (tempDependencys.TryGetValue(parameter.ParameterType, out temp))
                    {
                        args[i] = temp;
                        continue;
                    }
                }

                if (!cache.IsParameterOpenal(i))
                {
                    missingParameters.Add(parameter);
                }
            }

            if (missingParameters.Count != 0)
            {
                throw new DependencyMissingException(type, missingParameters);
            }

            cache.MethodInfo.Invoke(targe, args);
        }