示例#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);
        }
示例#2
0
        private IocMethodMetaData resolveMethod(Method method)
        {
            var metaData = new IocMethodMetaData();

            var parameters = method.Parameters.ToArray();

            Array.Sort(parameters, (x, y) => x.Index.CompareTo(y.Index));

            metaData.Parameters = new IocParameterMetaData[parameters.Length];

            for (var i = 0; i < parameters.Length; i++)
            {
                metaData.Parameters[i] = new IocParameterMetaData();

                metaData.Parameters[i].RelatedType = parameters[i].ParameterType;
                metaData.Parameters[i].Name        = parameters[i].Name;
                metaData.Parameters[i].Index       = i;

                if (parameters[i].Attributes.Contains(typeof(DefaultValueAttribute)))
                {
                    metaData.Parameters[i].DefaultValue = parameters[i].Attributes.GetAttribute <DefaultValueAttribute>()[0].Value;
                }

                //default value given by '=',like call(string name='sss');
                if (!metaData.Parameters[i].HasDefaultValue && parameters[i].ParameterInfo.HasDefaultValue)
                {
                    metaData.Parameters[i].DefaultValue = parameters[i].ParameterInfo.DefaultValue;
                }

                if (parameters[i].Attributes.Contains(typeof(DefaultImplementAttribute)))
                {
                    metaData.Parameters[i].Impl = parameters[i].Attributes.GetAttribute <DefaultImplementAttribute>()[0].Impl;
                }

                if (parameters[i].Attributes.Contains(typeof(FromConfigAttribute)))
                {
                    metaData.Parameters[i].ConfigKey = parameters[i].Attributes.GetAttribute <FromConfigAttribute>()[0].ConfigKey;
                }

                if (parameters[i].Attributes.Contains(typeof(NotNullAttribute)))
                {
                    metaData.Parameters[i].NotNull = true;
                }
            }


            return(metaData);
        }