public static Lazy <RequestDelegate> GetOrAddMiddlewarePipeline <TTenant>(this TenantShell <TTenant> tenantShell, Lazy <RequestDelegate> requestDelegateFactory) where TTenant : class { var result = tenantShell.Properties.GetOrAdd(nameof(TenantShellPipelineExtensions), requestDelegateFactory) as Lazy <RequestDelegate>; return(result); }
public static Lazy <ICabinet> GetOrAddTenantWebRootFileSystem <TTenant>(this TenantShell <TTenant> tenantShell, Lazy <ICabinet> factory) where TTenant : class { var result = tenantShell.Properties.GetOrAdd(WebRootKey, factory) as Lazy <ICabinet>; return(result); }
private Task <TenantShell <Tenant> > CreateGicrosoftTenant() { Guid tenantId = Guid.Parse("b17fcd22-0db1-47c0-9fef-1aa1cb09605e"); var tenant = new Tenant(tenantId, "Gicrosoft"); var result = new TenantShell <Tenant>(tenant); return(Task.FromResult(result)); }
private Task <TenantShell <Tenant> > CreateMoogleTenant() { Guid tenantId = Guid.Parse("049c8cc4-3660-41c7-92f0-85430452be22"); var tenant = new Tenant(tenantId, "Moogle"); // Also adding any additional Uri's that should be mapped to this same tenant. var result = new TenantShell <Tenant>(tenant, new Uri("http://localhost:5000"), new Uri("http://localhost:5001")); return(Task.FromResult(result)); }
public static Lazy <Task <AppFunc> > GetOrAddMiddlewarePipeline <TTenant>(this TenantShell <TTenant> tenantShell, Lazy <Task <AppFunc> > requestDelegateFactory) where TTenant : class { var property = tenantShell.GetOrAddProperty(nameof(TenantShellPipelineExtensions), requestDelegateFactory); tenantShell.RegisterCallbackOnDispose(() => { if (requestDelegateFactory.IsValueCreated) { requestDelegateFactory.Value?.Dispose(); } }); return(property); }
public async Task DisplayInfo(HttpContext context) { ILogger <Startup> logger = context.RequestServices.GetRequiredService <ILogger <Startup> >(); logger.LogDebug("App Run.."); ITenantContainerAdaptor container = context.RequestServices as ITenantContainerAdaptor; logger.LogDebug("App Run Container Is: {id}, {containerNAme}, {role}", container.ContainerId, container.ContainerName, container.Role); // Use ITenantAccessor to access the current tenant. ITenantAccessor <Tenant> tenantAccessor = container.GetRequiredService <ITenantAccessor <Tenant> >(); Tenant tenant = await tenantAccessor.CurrentTenant.Value; // This service was registered as singleton in tenant container. SomeTenantService someTenantService = container.GetService <SomeTenantService>(); // The tenant shell to access context for the tenant - even if the tenant is null ITenantShellAccessor <Tenant> tenantShellAccessor = context.RequestServices.GetRequiredService <ITenantShellAccessor <Tenant> >(); TenantShell <Tenant> tenantShell = await tenantShellAccessor.CurrentTenantShell.Value; var myOptions = context.RequestServices.GetRequiredService <IOptions <MyOptions> >(); string tenantShellId = tenantShell == null ? "{NULL TENANT SHELL}" : tenantShell.Id.ToString(); string tenantName = tenant == null ? "{NULL TENANT}" : tenant.Name; string injectedTenantName = someTenantService?.TenantName ?? "{NULL SERVICE}"; // Accessing a content file. string fileContent = someTenantService?.GetContentFile("/Info.txt"); context.Response.ContentType = new MediaTypeHeaderValue("application/json").ToString(); var result = new { TenantShellId = tenantShellId, TenantName = tenantName, TenantScopedServiceId = someTenantService?.Id, InjectedTenantName = injectedTenantName, TenantContentFile = fileContent, OptionsFoo = myOptions.Value.Foo }; string jsonResult = JsonConvert.SerializeObject(result); await context.Response.WriteAsync(jsonResult, Encoding.UTF8); logger.LogDebug("App Run Finished.."); }
public Task <TenantShell <Tenant> > Get(TenantIdentifier distinguisher) { if (distinguisher.Uri.Port == 5004) { Guid tenantId = Guid.Parse("b17fcd22-0db1-47c0-9fef-1aa1cb09605e"); var tenant = new Tenant(tenantId) { Name = "Foo" }; var result = new TenantShell <Tenant>(tenant); return(Task.FromResult(result)); } if (distinguisher.Uri.Port == 5000 || distinguisher.Uri.Port == 5001) { Guid tenantId = Guid.Parse("049c8cc4-3660-41c7-92f0-85430452be22"); var tenant = new Tenant(tenantId) { Name = "Bar" }; var result = new TenantShell <Tenant>(tenant, new Uri("http://localhost:5000"), new Uri("http://localhost:5001")); // additional distinguishers to map this same tenant shell instance too. return(Task.FromResult(result)); } // for an unknown tenant, we can either create the tenant shell as a NULL tenant by returning a TenantShell<TTenant>(null), // which results in the TenantShell being created, and will explicitly have to be reloaded() in order for this method to be called again. if (distinguisher.Uri.Port == 5002) { var result = new TenantShell <Tenant>(null); return(Task.FromResult(result)); } if (distinguisher.Uri.Port == 5003) { // or we can return null - which means we wil keep attempting to resolve the tenant on every subsequent request until a result is returned in future. // (i.e allows tenant to be created in backend in a few moments time). return(Task.FromResult <TenantShell <Tenant> >(null));; } throw new NotImplementedException("Please make request on ports 5000 - 5003 to see various behaviour. Can also use 63291 when launching under IISExpress"); }
public Task <TenantShell <Tenant> > Get(TenantIdentifier distinguisher) { if (distinguisher.Uri.Port == 5000 || distinguisher.Uri.Port == 5001) { Guid tenantId = Guid.Parse("049c8cc4-3660-41c7-92f0-85430452be22"); var tenant = new Tenant(tenantId, "Moogle"); // Also adding any additional Uri's that should be mapped to this same tenant. var result = new TenantShell <Tenant>(tenant, new Uri("http://localhost:5000"), new Uri("http://localhost:5001")); return(Task.FromResult(result)); } if (distinguisher.Uri.Port == 5002) { Guid tenantId = Guid.Parse("b17fcd22-0db1-47c0-9fef-1aa1cb09605e"); var tenant = new Tenant(tenantId, "Gicrosoft"); var result = new TenantShell <Tenant>(tenant); return(Task.FromResult(result)); } throw new NotImplementedException("Please make request on ports 5000 - 5003 to see various behaviour."); }
public static Lazy <ICabinet> GetOrAddTenantFileSystem <TTenant>(this TenantShell <TTenant> tenantShell, string key, Lazy <ICabinet> factory) where TTenant : class { return(tenantShell.GetOrAddProperty(key, factory) as Lazy <ICabinet>); }
public static Lazy <ICabinet> TryGetTenantFileSystem <TTenant>(this TenantShell <TTenant> tenantShell, string key) where TTenant : class { tenantShell.TryGetProperty(key, out Lazy <ICabinet> result); return(result); }
public static Lazy <ICabinet> GetOrAddTenantWebRootFileSystem <TTenant>(this TenantShell <TTenant> tenantShell, Lazy <ICabinet> factory) where TTenant : class { return(tenantShell.GetOrAddTenantFileSystem(WebRootKey, factory) as Lazy <ICabinet>); }
public static Lazy <ICabinet> TryGetWebRootFileSystem <TTenant>(this TenantShell <TTenant> tenantShell) where TTenant : class { return(tenantShell.TryGetTenantFileSystem(WebRootKey) as Lazy <ICabinet>); }
public static Lazy <ICabinet> GetOrAddTenantContentRootFileSystem <TTenant>(this TenantShell <TTenant> tenantShell, Lazy <ICabinet> factory) where TTenant : class { return(tenantShell.Properties.GetOrAdd(ContentRootKey, factory) as Lazy <ICabinet>); }
public static Lazy <Task <RequestDelegate> > GetOrAddMiddlewarePipeline <TTenant>(this TenantShell <TTenant> tenantShell, Lazy <Task <RequestDelegate> > requestDelegateFactory) where TTenant : class { return(tenantShell.GetOrAddProperty <Lazy <Task <RequestDelegate> > >(nameof(TenantShellPipelineExtensions), requestDelegateFactory)); }