Exemplo n.º 1
0
        private void callInitMethod(object instance, IocMethodMetaData method)
        {
            var paraInstances = new object[method.ParameterLength];

            var t = 0;

            foreach (var item in method.Parameters)
            {
                object para = null;

                if (item.IsFromConfig)
                {
                    var type = item.IsAbstract ? item.HasImpl ? item.Impl : null : null;

                    if (type == null)
                    {
                        type = IocServiceProvider.Instance.GetImplementation(item.RelatedType);

                        if (type == null)
                        {
                            throw new ImplementationNotFoundException($"");
                        }
                    }

                    para = JasmineConfigurationProvider.Instance.GetConfig(type, item.ConfigKey);
                }
                else if (item.HasDefaultValue)
                {
                    para = item.DefaultValue;
                }
                else if (item.IsAbstract)
                {
                    var type = item.HasImpl ? item.Impl : IocServiceProvider.Instance.GetImplementation(item.RelatedType);

                    if (type == null)
                    {
                        throw new ImplementationNotFoundException($"");
                    }

                    para = IocServiceProvider.Instance.GetService(type);
                }
                else if (BaseTypes.Base.Contains(item.RelatedType))
                {
                    para = JasmineDefaultValueProvider.GetDefaultValue(item.RelatedType);
                }
                else
                {
                    para = IocServiceProvider.Instance.GetService(item.RelatedType);
                }

                paraInstances[t] = para;

                ++t;
            }

            method.Method.Invoke(instance, paraInstances);
        }
Exemplo n.º 2
0
        public object[] Resolve(HttpFilterContext context)
        {
            var results = new object[_parameters.Length];

            for (int i = 0; i < _parameters.Length; i++)
            {
                var type = _parameters[i].IsAbstract ? _parameters[i].ImplType : _parameters[i].RelatedType;

                if (_parameters[i].FromBody)
                {
                    results[i] = context.HttpContext.Request.Body.ReadData(type, SerializeMode.Json);
                }
                else if (_parameters[i].FromQueryString)
                {
                    results[i] = JsonSerializer.Instance.Deserialize(context.HttpContext.Request.Query[_parameters[i].QueryStringKey], type);
                }
                else if (_parameters[i].FromPathVariable)
                {
                    results[i] = JsonSerializer.Instance.Deserialize(context.HttpContext.Request.Form[_parameters[i].PathVariableKey], type);
                }
                else if (_parameters[i].FromData)
                {
                    results[i] = context.PipelineDatas[_parameters[i].DataKey];
                }
                else if (_parameters[i].FromHeader)
                {
                }
                else if (_parameters[i].FromCookie)
                {
                }
                else if (_parameters[i].FromReturn)
                {
                }
                else
                {
                    throw new ParameterCanNotResolveException();
                }

                if (results[i] == null)
                {
                    if (!_parameters[i].NotNull)
                    {
                        results[i] = JasmineDefaultValueProvider.GetDefaultValue(_parameters[i].RelatedType);
                    }
                    else
                    {
                        throw new ParamterNullException();
                    }
                }
            }

            return(results);
        }
Exemplo n.º 3
0
        private void wireProperty(object instance, IocPropertyMetaData property)
        {
            object pInstance;

            if (property.FromConfig)
            {
                var type = property.IsAbstract ?
                           property.HasImpl ? property.Impl : null : null;

                if (type == null)
                {
                    type = IocServiceProvider.Instance.GetImplementation(property.RelatedType);

                    if (type == null)
                    {
                        throw new ImplementationNotFoundException($"");
                    }
                }

                pInstance = JasmineConfigurationProvider.Instance.GetConfig(type, property.ConfigKey);
            }
            else if (property.HasDefaultValue)
            {
                pInstance = property.DefaultValue;
            }
            else if (property.IsAbstract)
            {
                var type = property.HasImpl ?
                           property.Impl : IocServiceProvider.Instance.GetImplementation(property.RelatedType);

                if (type == null)
                {
                    throw new ImplementationNotFoundException($"");
                }

                pInstance = IocServiceProvider.Instance.GetService(type);
            }
            else if (BaseTypes.Base.Contains(property.RelatedType))
            {
                pInstance = JasmineDefaultValueProvider.GetDefaultValue(property.RelatedType);
            }
            else
            {
                pInstance = IocServiceProvider.Instance.GetService(property.RelatedType);
            }

            property.Setter.Invoke(instance, pInstance);
        }
        public object[] Resolve(RpcFilterContext context)
        {
            var rets = new object[_parameters.Length];

            for (int i = 0; i < _parameters.Length; i++)
            {
                var type = _parameters[i].IsAbstract ? _parameters[i].ImplType : _parameters[i].RelatedType;

                if (_parameters[i].FromBody)
                {
                    rets[i] = JsonSerializer.Instance.Deserialize(context.RpcContext.Request.Body, type);
                }
                else if (_parameters[i].FromQueryString)
                {
                    rets[i] = JsonSerializer.Instance.Deserialize(context.RpcContext.Request.Query[_parameters[i].QueryStringKey], type);
                }
                else if (_parameters[i].FromData)
                {
                    rets[i] = context.Datas[_parameters[i].DataKey];
                }
                else
                {
                    throw new ParameterCanNotResolveException();
                }

                if (rets[i] == null)
                {
                    if (!_parameters[i].NotNull)
                    {
                        rets[i] = JasmineDefaultValueProvider.GetDefaultValue(_parameters[i].RelatedType);
                    }
                    else
                    {
                        throw new ParamterNullException();
                    }
                }
            }

            return(rets);
        }
Exemplo n.º 5
0
        public object Create(IocServiceMetaData metaData, DependencyCheckNode node)
        {
            object instance;

            // don't need to think about abstract or interface, it already be processed by service provider
            if (metaData.ConstrctorMetaData.Constructor.IsDefaultConstructor)//default constructor,none parameter
            {
                instance = metaData.ConstrctorMetaData.Constructor.DefaultInvoker.Invoke();
            }
            else
            {
                /*
                 * check dependency loop
                 */
                var newNode = new DependencyCheckNode(node, metaData.RelatedType);

                var constructor = metaData.ConstrctorMetaData;

                var paramsInstances = new object[constructor.Parameters.Length];

                // genearate construtor parameters instance
                for (int i = 0; i < paramsInstances.Length; i++)
                {
                    if (constructor.Parameters[i].IsFromConfig)//config key
                    {
                        var type = constructor.Parameters[i].IsAbstract ? constructor.Parameters[i].Impl :
                                   constructor.Parameters[i].RelatedType;

                        if (type == null)
                        {
                            type = IocServiceProvider.Instance.GetImplementation(metaData.RelatedType);

                            if (type == null)
                            {
                                throw new ImplementationNotFoundException($"");
                            }
                        }

                        paramsInstances[i] = _configProvider.GetConfig(type, constructor.Parameters[i].ConfigKey);
                    }
                    else if (constructor.Parameters[i].HasDefaultValue)//default value
                    {
                        paramsInstances[i] = constructor.Parameters[i].DefaultValue;
                    }
                    else if (constructor.Parameters[i].IsAbstract) //abstract  or interface
                    {
                        if (constructor.Parameters[i].HasImpl)     //instructed by implementation type
                        {
                            paramsInstances[i] = IocServiceProvider.Instance.GetService(constructor.Parameters[i].Impl, newNode);
                        }
                        else
                        {
                            var impl = _manager.GetImplementation(constructor.Parameters[i].RelatedType);//try find impl

                            if (impl == null)
                            {
                                throw new ImplementationNotFoundException($"construct({constructor}),parameter({constructor.Parameters[i]}) ");
                            }

                            paramsInstances[i] = IocServiceProvider.Instance.GetService(impl, newNode);
                        }
                    }
                    else if (constructor.Parameters[i].RelatedType.IsBaseType())//config base type default value
                    {
                        paramsInstances[i] = JasmineDefaultValueProvider.GetDefaultValue(constructor.Parameters[i].RelatedType);
                    }
                    else
                    {
                        paramsInstances[i] = IocServiceProvider.Instance.GetService(constructor.Parameters[i].RelatedType, newNode);
                    }
                }

                instance = constructor.Constructor.Invoker.Invoke(paramsInstances);
            }

            // need wire properties
            if (metaData.Properties.Length != 0)
            {
                foreach (var item in metaData.Properties)
                {
                    wireProperty(instance, item);
                }
            }

            // call init method
            if (metaData.HasInitMethod)
            {
                callInitMethod(instance, metaData.InitMethod);
            }

            // raise instance created event
            foreach (var item in _listeners)
            {
                item.Value.OnInstanceCreated(metaData, instance);
            }

            return(instance);
        }
        public object ConverSqlRawValue(object value, Type type)
        {
            if (value is DBNull)
            {
                return(JasmineDefaultValueProvider.GetDefaultValue(type));
            }

            if (type.IsEnum)
            {
                return(Enum.ToObject(type, value));
            }

            /*
             *  do explicit convert
             */
            switch (type.FullName)
            {
            case BaseTypes.SByte:
                return((sbyte)value);

            case BaseTypes.NSByte:
                return((sbyte?)value);

            case BaseTypes.Char:
                return((char)value);

            case BaseTypes.NChar:
                return((char?)value);

            case BaseTypes.Byte:
                return((byte)value);

            case BaseTypes.NByte:
                return((byte?)value);

            case BaseTypes.Boolean:
                return((bool)value);

            case BaseTypes.NBoolean:
                return((bool?)value);

            case BaseTypes.UShort:
                return((ushort)value);

            case BaseTypes.NUShort:
                return((ushort?)value);

            case BaseTypes.Short:
                return((short)value);

            case BaseTypes.NShort:
                return((short?)value);

            case BaseTypes.Int:
                return((int)value);

            case BaseTypes.NInt:
                return((int?)value);

            case BaseTypes.UInt:
                return((uint)value);

            case BaseTypes.NUInt:
                return((uint?)value);

            case BaseTypes.Long:
                return((long)value);

            case BaseTypes.NLong:
                return((long?)value);

            case BaseTypes.ULong:
                return((ulong)value);

            case BaseTypes.NULong:
                return((ulong?)value);

            case BaseTypes.Float:
                return((float)value);

            case BaseTypes.NFloat:
                return((float?)value);

            case BaseTypes.Double:
                return((double)value);

            case BaseTypes.NDouble:
                return((double?)value);

            case BaseTypes.Decimal:
                return((decimal)value);

            case BaseTypes.NDecimal:
                return((decimal?)value);

            case BaseTypes.Guid:
                return((Guid)value);

            case BaseTypes.NGuid:
                return((Guid?)value);

            case BaseTypes.DateTime:
                return((DateTime)value);

            case BaseTypes.NDateTime:
                return((DateTime?)value);

            case BaseTypes.TimeSpan:
                return((TimeSpan)value);

            case BaseTypes.NTimeSpan:
                return((TimeSpan?)value);

            case BaseTypes.DateTimeOffset:
                return((DateTimeOffset)value);

            case BaseTypes.NDateTimeOffset:
                return((DateTimeOffset?)value);

            case BaseTypes.String:
                return(value);

            default:
                throw new NotConvertableException(type, GetType());
            }
        }