public IEnumerable <Feature> Calculate(IFeatureParameters data) { var featureParameters = data as FeatureParameters; var features = new List <Feature>(); foreach (MethodToCall methodToCall in methodsToCall) { object instance = methodToCall.Instance; IEnumerable <KeyValuePair <Attribute, MethodInfo> > callData = methodToCall.CallData; foreach (var call in callData) { var featureAttribute = call.Key as FeatureAttribute; MethodInfo methodInfo = call.Value; object value = methodInfo.Invoke(instance, new object[] { featureParameters }); string featureName = featureAttribute.FeatureName; features.Add(new Feature { Value = Convert.ToDouble(value), Name = featureName, Number = featureNumbers[featureName] }); } Type instanceType = instance.GetType(); Type interfaceType = instanceType.GetInterfaces().FirstOrDefault(); if (interfaceType == null) { continue; } MethodInfo[] instanceMethods = interfaceType.GetMethods(); MethodInfo getValueMethodInfo = instanceMethods.FirstOrDefault( m => m.GetCustomAttributes(typeof(GetValueAttribute), true).Any()); if (getValueMethodInfo != null) { object value = getValueMethodInfo.Invoke(instance, new object[] { featureParameters }); if (value.GetType().IsGenericType) { var values = value as IEnumerable <Feature>; features.AddRange(values.Select(v => new Feature { Value = v.Value, Name = v.Name, Number = v.Number })); } else { features.Add(new Feature { Value = (double)value }); } } } return(features); }
public IEnumerable <Feature> Calculate(IFeatureParameters data) { // todo return(null); }