private static Tuple<Type, Delegate, object[]> ToMiddlewareFactory(object middlewareObject, object[] args)
{
if (middlewareObject == null)
{
throw new ArgumentNullException("middlewareObject");
}
Delegate middlewareDelegate = middlewareObject as Delegate;
if (middlewareDelegate != null)
{
return Tuple.Create(GetParameterType(middlewareDelegate), middlewareDelegate, args);
}
Tuple<Type, Delegate, object[]> factory = ToInstanceMiddlewareFactory(middlewareObject, args);
if (factory != null)
{
return factory;
}
factory = ToGeneratorMiddlewareFactory(middlewareObject, args);
if (factory != null)
{
return factory;
}
if (middlewareObject is Type)
{
return ToConstructorMiddlewareFactory(middlewareObject, args, ref middlewareDelegate);
}
throw new NotSupportedException(BuilderResources.Exception_MiddlewareNotSupported + (middlewareObject ?? string.Empty).ToString());
}