01-010 HttpAbstractions 之 UseMiddlewareExtensions
Posted on 2015-03-06 17:16 DotNet1010 阅读(154) 评论(0) 收藏 举报部分代码如下:
if (parameters.Length == 1)
{
return (RequestDelegate)methodinfo.CreateDelegate(typeof(RequestDelegate), instance);
}
return context =>
{
var serviceProvider = context.RequestServices ?? context.ApplicationServices ?? applicationServices;
if (serviceProvider == null)
{
throw new Exception("TODO: IServiceProvider is not available");
}
var arguments = new object[parameters.Length];
arguments[0] = context;
for(var index = 1; index != parameters.Length; ++index)
{
var serviceType = parameters[index].ParameterType;
arguments[index] = serviceProvider.GetService(serviceType);
if (arguments[index] == null)
{
throw new Exception(string.Format("TODO: No service for type '{0}' has been registered.", serviceType));
}
}
return (Task)methodinfo.Invoke(instance, arguments);
};
上面的代码在写Middleware 时可以使得Invoke方法拥有多个方法. 第一个参数是HttpContext ,后续的参数都可以使用DI 支持的对象。
这样减少了代码的编写量。
浙公网安备 33010602011771号