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);
            });
        }
Esempio n. 2
0
 /// <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));
 }