예제 #1
0
        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);
 }