private IocPropertyMetaData resolveProperty(Field filed) { var metaData = new IocPropertyMetaData(); metaData.RelatedType = filed.FieldInfo.ReflectedType; metaData.Name = filed.Name; if (filed.Attributes.Contains(typeof(DefaultValueAttribute))) { metaData.DefaultValue = filed.Attributes.GetAttribute <DefaultValueAttribute>()[0].Value; } if (filed.Attributes.Contains(typeof(DefaultImplementAttribute))) { metaData.Impl = filed.Attributes.GetAttribute <DefaultImplementAttribute>()[0].Impl; } if (filed.Attributes.Contains(typeof(FromConfigAttribute))) { metaData.ConfigKey = filed.Attributes.GetAttribute <FromConfigAttribute>()[0].ConfigKey; } metaData.Setter = filed.Setter; return(metaData); }
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); }