/// <summary> /// .Net core configuration extension /// </summary> /// <param name="services"></param> /// <param name="configurationCallback"></param> /// <returns></returns> public static IServiceCollection AddSignals(this IServiceCollection services, Action <FluentWebApplicationBootstrapConfiguration> configurationCallback) { StackTrace stackTrace = new StackTrace(); var assembly = stackTrace.GetFrame(1).GetMethod().DeclaringType.Assembly; var configuration = new FluentWebApplicationBootstrapConfiguration(); configurationCallback(configuration); configuration.ScanAssemblies.Add(assembly); configuration.Bootstrap(configuration.ScanAssemblies.ToArray()); return(services); }
/// <summary> /// OWIN middleware registration extension /// </summary> /// <param name="app"></param> /// <param name="configurationCallback"></param> /// <returns></returns> public static IAppBuilder MapSignals(this IAppBuilder app, Action <FluentWebApplicationBootstrapConfiguration> configurationCallback) { var ass = AppDomain.CurrentDomain.GetAssemblies(); // get entry assembly StackTrace stackTrace = new StackTrace(); // TODO: workaround for tests var assembly = stackTrace.GetFrame(1).GetMethod().DeclaringType.Assembly; // configure web applicaiton var configuration = new FluentWebApplicationBootstrapConfiguration(); configurationCallback(configuration); configuration.ScanAssemblies.Add(assembly); configuration.Bootstrap(configuration.ScanAssemblies.ToArray()); // register midleware for handling session app.Use(async(IOwinContext context, Func <Task> next) => { HttpContextBase httpContext = context.Get <HttpContextBase>(typeof(HttpContextBase).FullName); httpContext.SetSessionStateBehavior(SessionStateBehavior.Required); await next.Invoke(); }); // handle session app.UseStageMarker(PipelineStage.MapHandler); var mediator = SystemBootstrapper.GetInstance <WebMediator>(); // mediator middleware return(app.Use(async(IOwinContext context, Func <Task> next) => { if (mediator.Dispatch() != MiddlewareResult.StopExecutionAndStopMiddlewarePipe) { await next.Invoke(); } })); }