使用Autofac的上下文上的MVC多租户应用程序实例范围



大家好,我正在优化我的应用程序,有一个问题。我有一个设计,看起来像这样:

ApplicationCore->ApplicationDatabases模型生成器中的T4

ApplicationData->在ApplicationCore 中访问数据库上下文的Respositories

    public class entityRepository<TEntity> : entityRepository<TEntity> where TEntity : class, IEntity
    {
    protected readonly DatabaseContext dbContext;
    protected readonly IDbSet<TEntity> currentTableContext;
    public entityRepository(DatabaseContext context)
    {
        this.DbContext = context;
        currentTableContext = context.Set<TEntity>();
    }

ApplicationDatabases->从模型生成器创建的数据库

ApplicationServices->创建实体的服务Repository

private readonly entityRepository<Users> _userRepository;
public userService(entityRepository<Users> userRepository)
{
     _userRepository = userRepository;
}

我想知道的是,是否允许我在Autofac中将entityRepository注册为InstancePerTenant,或者我应该使用另一个实例作用域。

builder.Register(context => new DatabaseContext()).InstancePerTenant();
builder.RegisterGeneric(typeof(entityRepository<>)).As(typeof(IentityRepository<>)).InstancePerTenant;

我现在正在这样做,它有效,但我不确定以后是否会得到任何资源或类似的问题。如果我能得到一些建议,我也会很高兴。

IMHO,我曾参与过一个多租户项目,但不使用autofac。我有几点要向你提出讨论

  1. 在多租户应用程序的情况下,将每个租户的用户和实体存储库加载到内存中,这似乎有点开销
  2. 在租户希望查看其子租户数据的用例中,如何实现这一点
  3. 当应用程序负载为50租户时,从应用程序的角度来看,并行性和对负载的响应性会发生什么变化

请仔细考虑这些用例和其他在转移到生产后可能出现的用例,并分享您的想法。

最新更新