private object TryResolveType(Type target)
{
var ctors =
(from ctr in target.GetConstructors()
let args = ctr.GetParameters()
orderby args.Length descending
select new { args, ctr });
foreach (var it in ctors)
{
var args = new List<object>();
foreach (var a in it.args)
args.Add(Resolve(a.ParameterType, false));
if (args.Contains(null))
continue;
var instance = it.ctr.Invoke(args.ToArray());
CacheIf(target, instance);
return instance;
}
return null;
}