public static IAppBuilder UseAutofacMiddleware(this IAppBuilder app, ILifetimeScope container) { if (app == null) { throw new ArgumentNullException("app"); } if (container == null) { throw new ArgumentNullException("container"); } return app .RegisterAutofacLifetimeScopeInjector(container) .UseAllMiddlewareRegisteredInContainer(container); }
private static IAppBuilder RegisterAutofacLifetimeScopeInjector(this IAppBuilder app, ILifetimeScope container) { app.Use(async (context, next) => { using (var lifetimeScope = container.BeginLifetimeScope(MatchingScopeLifetimeTags.RequestLifetimeScopeTag, b => b.RegisterInstance(context).As<IOwinContext>())) { context.Set(Constants.OwinLifetimeScopeKey, lifetimeScope); await next(); } }); app.Properties[InjectorRegisteredKey] = true; return app; }
using System; using Microsoft.Owin; namespace Autofac.Integration.Owin { /// <summary> /// Extension methods for using Autofac within an OWIN context. /// </summary> public static class OwinContextExtensions { /// <summary> /// Gets the current Autofac lifetime scope from the OWIN context. /// </summary> /// <param name="context">The OWIN context.</param> /// <returns>The current lifetime scope.</returns> /// <exception cref="System.ArgumentNullException"> /// Thrown if <paramref name="context" /> is <see langword="null" />. /// </exception> public static ILifetimeScope GetAutofacLifetimeScope(this IOwinContext context) { if (context == null) { throw new ArgumentNullException("context"); } return context.Get<ILifetimeScope>(Constants.OwinLifetimeScopeKey); } } }
时间: 2024-12-23 23:13:49