Ejemplo n.º 1
0
    /// <summary>
    /// Create our serivce provider.
    /// </summary>
    /// <param name="containerBuilder"></param>
    /// <returns></returns>
    public IServiceProvider CreateServiceProvider(ContainerBuilder containerBuilder)
    {
        MultiTenantContainer <TTenant, TKey> container = null;

        Func <MultiTenantContainer <TTenant, TKey> > containerAccessor = () =>
        {
            return(container);
        };

        containerBuilder.RegisterInstance(containerAccessor).SingleInstance();

        container = new MultiTenantContainer <TTenant, TKey>(containerBuilder.Build(), _tenantServicesConfiguration);

        return(new AutofacServiceProvider(containerAccessor()));
    }
Ejemplo n.º 2
0
        public static IServiceProvider UseMultiTenantServiceProvider <T>(this IServiceCollection services, Action <T, ContainerBuilder> registerServicesForTenant) where T : Tenant
        {
            var containerBuilder = new ContainerBuilder();

            MultiTenantContainer <T>         container         = null;
            Func <MultiTenantContainer <T> > containerAccessor = () => container;

            services.AddSingleton(containerAccessor);

            containerBuilder.Populate(services);

            // 创建并赋值多租户容器
            container = new MultiTenantContainer <T>(containerBuilder.Build(), registerServicesForTenant);
            // 返回新的 IServiceProvider 来代替内置标准的服务提供者
            return(new AutofacServiceProvider(containerAccessor()));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Create our serivce provider
        /// </summary>
        /// <param name="containerBuilder"></param>
        /// <returns></returns>
        public IServiceProvider CreateServiceProvider(ContainerBuilder containerBuilder)
        {
            MultiTenantContainer?container = null;

            MultiTenantContainer?containerAccessor()
            {
                return(container);
            }

            containerBuilder
            .RegisterInstance((Func <MultiTenantContainer?>)containerAccessor)
            .SingleInstance();

            container = new MultiTenantContainer(containerBuilder.Build(), _tenantServicesConfiguration);

            return(new AutofacServiceProvider(containerAccessor()));
        }
Ejemplo n.º 4
0
        public static IServiceProvider UseMultiTenantServiceProvider(this IServiceCollection services, Action <Tenant?, ContainerBuilder> registerServicesForTenant)
        {
            ContainerBuilder containerBuilder = new ContainerBuilder();

            //Declare our container and create a accessor function
            //This is to support the Func<MultiTenantContainer<T>> multiTenantContainerAccessor parameter in the middleware
            MultiTenantContainer?container = null;

            MultiTenantContainer?containerAccessor()
            {
                return(container);
            }

            services.AddSingleton((Func <MultiTenantContainer?>)containerAccessor);

            //Add all the application level services to the builder
            containerBuilder.Populate(services);

            //Create and assign the new multiteant container
            container = new MultiTenantContainer(containerBuilder.Build(), registerServicesForTenant);

            //Return the new IServiceProvider which will be used to replace the standard one
            return(new AutofacServiceProvider(containerAccessor()));
        }