private object BuildInternal(Type signature)
{
object app;
if (!_properties.TryGetValue(Constants.BuilderDefaultApp, out app))
{
app = NotFound;
}
foreach (Tuple<Type, Delegate, object[]> middleware in _middleware.Reverse())
{
Type neededSignature = middleware.Item1;
Delegate middlewareDelegate = middleware.Item2;
object[] middlewareArgs = middleware.Item3;
app = Convert(neededSignature, app);
object[] invokeParameters = new[] { app }.Concat(middlewareArgs).ToArray();
app = middlewareDelegate.DynamicInvoke(invokeParameters);
app = Convert(neededSignature, app);
}
return Convert(signature, app);
}