Example #1
0
        private object GetTypeWithCtorParams(IBaseTypeAction container, TypeContextFactory factory)
        {
            object         concreteResult = null;
            IList <object> args           = new List <object>();

            if (container.Ctor != null)
            {
                var foundCtor = container.TypeToCreate.GetConstructor(container.Ctor);

                CreateCtorParams(factory, foundCtor.GetParameters(), args);

                concreteResult = foundCtor.Invoke(args.ToArray());
            }
            else
            {
                var ctors = container.TypeToCreate.GetConstructors().Where(x => x.GetParameters().Any());

                if (ctors.Any())
                {
                    var ctorParams = ctors.First().GetParameters();

                    CreateCtorParams(factory, ctorParams, args);

                    concreteResult = container.TypeToCreate.GetConstructor(args.Select(x => x.GetType()).ToArray()).Invoke(args.ToArray());
                }
            }

            return(concreteResult);
        }
Example #2
0
        private object GetInstanceType(TypeContextFactory factory, IBaseTypeAction typeAction)
        {
            if (typeAction.Instance != null)
            {
                return(typeAction.Instance);
            }

            var concreteResult = GetTypeWithCtorParams(typeAction, factory) ?? Activator.CreateInstance(typeAction.TypeToCreate);

            return(concreteResult);
        }
        public override object Instance(TypeContextFactory factory, IBaseTypeAction typeAction)
        {
            if (_instance != null)
            {
                return(_instance);
            }

            lock (_lock)
            {
                _instance = base.Instance(factory, typeAction);
            }
            return(_instance);
        }
Example #4
0
        public override object Instance(TypeContextFactory factory, IBaseTypeAction typeAction)
        {
            if (_data != null)
            {
                return(_data.Value);
            }

            lock (_locked)
            {
                _data = new ThreadLocal <object>(() => base.Instance(factory, typeAction));
            }

            return(_data.Value);
        }
Example #5
0
        private static void CreateCtorParams(TypeContextFactory factory, IEnumerable <ParameterInfo> parameterInfo, IList <object> args)
        {
            foreach (var param in parameterInfo)
            {
                var foundType = factory.FindTypeFromParameter(param.ParameterType);

                if (foundType != null)
                {
                    var instanceToAdd = factory.GetInstance(foundType.RegisteredTypeAction.InterfaceType);

                    args.Add(instanceToAdd);
                }
            }
        }
Example #6
0
        public virtual object Instance(TypeContextFactory factory, IBaseTypeAction typeAction)
        {
            var concreteResult = GetInstanceType(factory, typeAction);

            if (typeAction.GetType().GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(ITypeAction <,>)))
            {
                dynamic typeContainer = typeAction;
                if (typeContainer.AfterCreationDoThis != null)
                {
                    concreteResult = typeContainer.AfterCreationDoThis((dynamic)concreteResult);
                }
            }

            return(concreteResult);
        }