public T Get <T>(IHttpHeaders headers) { var retVal = _activator.Activate <T>(null); foreach (var prop in retVal.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) { if (prop.PropertyType.IsPrimitive || prop.PropertyType == typeof(string)) { string stringValue; if (headers.TryGetByName(prop.Name, out stringValue)) { var value = Convert.ChangeType(stringValue, prop.PropertyType); prop.SetValue(retVal, value); } } else { var value = Get(prop.PropertyType, headers, prop.Name); prop.SetValue(retVal, value); } } return(retVal); }
public static T Activate <T>(this IObjectActivator activator, Func <string, Type, object> argumentGetter) { return((T)activator.Activate(typeof(T), argumentGetter)); }