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); }
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); }