diff --git a/src/Microsoft.AspNet.RequestContainer/ContainerExtensions.cs b/src/Microsoft.AspNet.RequestContainer/ContainerExtensions.cs index 4cfdb4210f..86d72c1e20 100644 --- a/src/Microsoft.AspNet.RequestContainer/ContainerExtensions.cs +++ b/src/Microsoft.AspNet.RequestContainer/ContainerExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Reflection; using System.Collections.Generic; using System.Linq; using Microsoft.AspNet.Abstractions; @@ -14,32 +15,32 @@ namespace Microsoft.AspNet.RequestContainer // TODO: move this ext method someplace nice return builder.Use(next => { - //TODO: this should be MethodInfo.CreateDelegate for coreclr var typeActivator = builder.ServiceProvider.GetService(); var instance = typeActivator.CreateInstance(middleware, new[] { next }.Concat(args).ToArray()); - return (RequestDelegate)Delegate.CreateDelegate(typeof(RequestDelegate), instance, "Invoke"); + var methodinfo = middleware.GetTypeInfo().GetDeclaredMethod("Invoke"); + return (RequestDelegate)methodinfo.CreateDelegate(typeof(RequestDelegate), instance); }); } - public static IBuilder UseContainer(this IBuilder app) + public static IBuilder UseContainer(this IBuilder builder) { - return app.UseMiddleware(typeof(ContainerMiddleware)); + return builder.UseMiddleware(typeof(ContainerMiddleware)); } - public static IBuilder UseContainer(this IBuilder app, IServiceProvider applicationServices) + public static IBuilder UseContainer(this IBuilder builder, IServiceProvider applicationServices) { - app.ServiceProvider = applicationServices; + builder.ServiceProvider = applicationServices; - return app.UseMiddleware(typeof(ContainerMiddleware)); + return builder.UseMiddleware(typeof(ContainerMiddleware)); } - public static IBuilder UseContainer(this IBuilder app, IEnumerable applicationServices) + public static IBuilder UseContainer(this IBuilder builder, IEnumerable applicationServices) { var serviceCollection = new ServiceCollection(); serviceCollection.Add(applicationServices); - app.ServiceProvider = serviceCollection.BuildServiceProvider(app.ServiceProvider); + builder.ServiceProvider = serviceCollection.BuildServiceProvider(builder.ServiceProvider); - return app.UseMiddleware(typeof(ContainerMiddleware)); + return builder.UseMiddleware(typeof(ContainerMiddleware)); } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.RequestContainer/ContainerMiddleware.cs b/src/Microsoft.AspNet.RequestContainer/ContainerMiddleware.cs index d2295e90c1..a33a6ac7db 100644 --- a/src/Microsoft.AspNet.RequestContainer/ContainerMiddleware.cs +++ b/src/Microsoft.AspNet.RequestContainer/ContainerMiddleware.cs @@ -43,12 +43,19 @@ namespace Microsoft.AspNet.RequestContainer _rootHttpContextAccessor.SetContextSource(AccessRootHttpContext, ExchangeRootHttpContext); } +#if NET45 +#else +#warning This MUST NOT be ThreadStatic in reality + [ThreadStatic] + HttpContext THIS_IS_BROKEN_AND_MUST_BE_CHANGED; +#endif + private HttpContext AccessRootHttpContext() { #if NET45 return CallContext.LogicalGetData(LogicalDataKey) as HttpContext; #else - throw new NotImplementedException() + return THIS_IS_BROKEN_AND_MUST_BE_CHANGED; #endif } @@ -59,7 +66,9 @@ namespace Microsoft.AspNet.RequestContainer CallContext.LogicalSetData(LogicalDataKey, httpContext); return prior; #else - throw new NotImplementedException() + var prior = THIS_IS_BROKEN_AND_MUST_BE_CHANGED; + THIS_IS_BROKEN_AND_MUST_BE_CHANGED = httpContext; + return prior; #endif }