public static string Resource(this UrlHelper helper, object o)
{
Func<object, Tuple<string, int>> extractor;
if (!_routeDataExtractors.TryGetValue(o.GetType(), out extractor))
{
extractor = _routeDataExtractors[o.GetType()] = CreateExtractor(o.GetType());
}
var tup = extractor(o);
return helper.Route("DefaultApi", new
{
controller = Pluralizer.ToPlural(tup.Item1).ToLower(),
id = tup.Item2
});
}