chrisgate / TinySaas

MultiTenancy on ASP.NET Core, built on AutoFac

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TinySaas

Build Coverage Nuget (with prereleases)

TinySaas is a C# library for building multitenant applications with .NET Core 3.0+

Supported Use Cases

  • Shared services
  • Per-tenant services
  • Schema per-tenant (Data Isolation)
  • Database per-tenant (Data Isolation)
  • Shared database (Data Isolation)
  • Shared options
  • Per-tenant options
  • Shared Authentication and Authorization
  • Per-tenant Authentication and Authorization

Quickstart

dotnet add package CodEaisy.TinySaas.AspNetCore --version 1.0.0
  • In Startup.cs, add the following inside the ConfigureServices method.

      public void ConfigureServices(IServiceCollection services)
      {
          // register all global singleton services here, and also dependencies for your TenantStore and ResolutionStrategy if any
    
          // ...
    
          // OPTION 1
          services.AddMultitenancy<Tenant, TenantStore<Tenant>, TenantResolutionStrategy>();
    
          // OPTION 2
          // uses default `CodEaisy.TinySaas.Model.TinyTenant` as tenant model
          services.AddMultitenancy<TenantStore<TinyTenant>, TenantResolutionStrategy>();
    
          // ...
    
          // services.AddControllers();
      }

    Then, add the following in the Configure method

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        // enable multitenant support, with missing tenant handler and tenant container
    
        // OPTION 1
        // missing tenant handler has a dependency that can be provided immediately
        app.UseMultitenancy<Tenant, MissingTenantHandler, MissingTenantOptions>(missingTenantOptions);
    
        // OPTION 2
        // missing tenant handler does not have a dependency or dependency is already registered in services
        app.UseMultitenancy<Tenant, MissingTenantHandler>();
    
        // OPTION 3
        // Use `SimpleTenant` as tenant model, and missing tenant handler does not have a dependency or dependency is already registered in services
        app.UseMultitenancy<TMissingTenantHandler>()
    
        // ...
    }
  • In Program.cs, add the following in the CreateHostBuilder method.

    public static IHostBuilder CreateHostBuilder(string[] args) =>
          Host.CreateDefaultBuilder(args)
              .ConfigureWebHostDefaults(webBuilder =>
              {
                  webBuilder.UseStartup<Startup>();
              })
              // OPTION 1: add multitenant support via TenantStartup class
              .ConfigureMultitenancy<TenantStartup, Tenant>();
              // OPTION 2: add multitenant support via static method
              .ConfigureMultitenancy<Tenant>(ClassName.StaticMethodName);

    NOTE:

    • Tenant must implement CodEaisy.TinySaas.Interface ITenant.
    • TenantStore must implement CodEaisy.TinySaas.Interface.ITenantStore.
    • TenantResolutionStrategy must implement CodEaisy.TinySaas.Interface.ITenantResolutionStrategy respectively.
    • TenantStartup must implement IMultitenantStartup
    • ClassName.StaticMethodName must be of type System.Action<TTenant, Autofac.ContainerBuilder> where TTenant implements ITenant

Requirements

ASP.NET Core 3.1+

Changelog

Learn about the latest improvements.

Credits

Gunnar Peipman and Michael McKenna for their awesome works on Saas in ASP.NET Core.

Want to help ?

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues in the hotlist: community-help.

About

MultiTenancy on ASP.NET Core, built on AutoFac


Languages

Language:C# 97.4%Language:Makefile 2.6%