public Action <IApplicationBuilder> Configure(Action <IApplicationBuilder> next) { return(builder => { IOptionsMonitor <MultitenancyOptions <TTenant> > monitor = builder.ApplicationServices.GetService <IOptionsMonitor <MultitenancyOptions <TTenant> > >(); if (monitor != null) { monitor.OnChangeDelayed(x => { Task.Delay(1000).ContinueWith((continuationAction) => { GetService <ITenantResolver <TTenant> >()?.Reset(); GetService <IServiceFactoryForMultitenancy <TTenant> >()?.RemoveAll(); Console.WriteLine($" Configuration changed. "); }); //Thread.Sleep(200); //GetService<ITenantResolver<TTenant>>()?.Reset(); //GetService<IServiceFactoryForMultitenancy<TTenant>>()?.RemoveAll(); //Console.WriteLine($" Configuration changed. "); }); T GetService <T>() { return builder.ApplicationServices.GetService <T>(); } } builder.UseMultitenancy <TTenant>(); builder.UseMiddleware <MultitenancyRequestServicesContainerMiddleware <TTenant> >(); //builder.UsePerTenant<TStartup>((ctx, innerBuilder) => { }); next(builder); }); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="monitor"></param> /// <param name="listener"></param> /// <param name="delay"></param> /// <returns></returns> public static IDisposable OnChangeDelayed <T>(this IOptionsMonitor <T> monitor, Action <T> listener, int delay = DefaultDelay) { return(monitor.OnChangeDelayed( (obj, _) => listener(obj), delay)); }