每个租户的Autofac多租户无法解析类型

时间:2019-04-01 14:02:49

标签: autofac

我有一个使用Autofac.Multitenant 3.1.1的ASP.NET MVC / WebApi2应用程序。我已经设置了一个TenantIdentificationStrategy来标识租户。我还注册了一个类型为InstancePerTenant。我为每个客户都有一个租户ID,对于没有上下文的后台工作有一个特殊的ID TenantIdentificationStrategy可以正确调用,并且可以从上下文中找到ID,但是InstancePerTenant在启动时仅被无效化两次:一次用于默认的Lifetimescope(租户为null),一次用于第一个租户。如果我注销并与另一名租户登录,则将重用同一类型,而不是新的类型。我可以在容器中看到,每个tenantid创建了一个tenantlifetime范围,但没有创建4个独立的InstancePerTenant类型。 我的租户ID代码是:

    public class TenantIdentificationStrategy : ITenantIdentificationStrategy
    {
        public bool TryIdentifyTenant(out object tenantId)
        {
            tenantId = null;
            try
            {
                var context = HttpContext.Current;
                if (context == null)
                {
                    tenantId = "jobservice";
                }
                else
                {
                    if (context.User?.Identity != null && context.User.Identity.IsAuthenticated)
                    {
                        var claims = context.User as ClaimsPrincipal;
                        tenantId = claims.FindAll(c => c.Type == "cID").FirstOrDefault()?.Value;
                    }
                }
            }
            catch (HttpException)
            {
                // Happens at app startup in IIS 7.0
            }
            return tenantId != null;
        }
    }

在Startup.cs-Configuration()中,我有(摘要):

var builder = new ContainerBuilder();
builder.RegisterAssemblyModules(AppDomain.CurrentDomain.GetAssemblies());
var container = builder.Build();
var tenantIdentifier = new TenantIdentificationStrategy();
mtContainer = new MultitenantContainer(tenantIdentifier, container);

在单独的程序集中还有一个注册模块:

    public class RegistrationModule : Autofac.Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            ......
            builder.RegisterType<Office365ClientService>().As<IOffice365ClientService>().InstancePerDependency();
            builder.RegisterType<Office365Service>().As<IOffice365Service>().InstancePerDependency();
            builder.RegisterType<Office365ClientHttpProvider>().As<IHttpProvider>().InstancePerTenant();
            ......
        }
    }

Office365ClientService依赖于IHttpProvider

我错过了什么吗?

0 个答案:

没有答案
相关问题