gpt4 book ai didi

asp.net-mvc - Autofac:自定义 LifetimeScope

转载 作者:行者123 更新时间:2023-12-04 05:07:40 25 4
gpt4 key购买 nike

我正在构建一个 Multi-Tenancy MVC 4 应用程序并使用 Autofac 作为容器。

我一直在看 Autofac MultiTenant 库,但是除非我错过了一些我认为它并不真正适合我需要的东西。这是我的情况:

  • 我不知道所有的租户都是在执行过程中创建的
  • 租户没有不同的依赖关系,只有存储在实例中的数据
  • 我有一些实例需要 每个租户 , 确保不泄露数据
  • 我有一些实例将是根容器中的单个实例(不是问题)
  • 我有一些实例将根据 http 请求(不是问题)
  • 我根据他们使用
  • 访问网站的 URL 来确定租户。

    我找不到任何适合我需要的东西,所以我想我需要寻找一种方法来为每个租户创建自己的生命周期范围。我将如何去创造这样的东西?

    最佳答案

    [我之前回答并表示您无法即时注册新租户。那是不正确的,我正在相应地更新。

    我认为你可以用 Autofac.Extras.Multitenant 做你想做的事,尽管你会想要彻底测试它(和 let us know if it's broken )。

  • 租户没有不同的依赖关系,只有存储在实例中的数据 :在容器级别注册公共(public)依赖项,但对于每个租户具有不同数据的实例,将其注册为 InstancePerTenant .
  • 我有一些需要每个租户的实例,以确保不泄漏数据 : 使用 InstancePerTenant注册扩展。
  • 我根据他们使用 访问网站的 URL 来确定租户:实现你自己的ITenantIdentificationStrategy查看 URL 并转换为租户 ID。

  • 新租户在执行期间需要注册 item 是我以前认为不会起作用的东西,但现在我认为它会起作用。

    在应用启动时创建租户时,如下所示:
    // Configure application-level defaults.
    var builder = new ContainerBuilder();
    builder.RegisterType<Consumer>().As<IDependencyConsumer>().InstancePerDependency();
    builder.RegisterType<BaseDependency>().As<IDependency>().SingleInstance();
    var appContainer = builder.Build();

    // Configure tenant identification and start the multitenant container.
    var tenantIdentifier = new MyTenantIdentificationStrategy();
    var mtc = new MultitenantContainer(tenantIdentifier, appContainer);

    // Configure overrides for existing tenants.
    mtc.ConfigureTenant('1', b => b.RegisterType<Tenant1Dependency>().As<IDependency>().InstancePerDependency());
    mtc.ConfigureTenant('2', b => b.RegisterType<Tenant2Dependency>().As<IDependency>().SingleInstance());

    // Set the MVC dependency resolver.
    DependencyResolver.SetResolver(new AutofacDependencyResolver(mtc));

    如果您需要在应用程序运行时创建租户,只要您之前没有配置过租户(没有重复的租户 ID),您应该能够做到这一点。

    我认为它会像这样工作:
    // Get the current application container.
    var mtc = AutofacDependencyResolver.Current.ApplicationContainer as MultitenantContainer;

    // Configure the new tenant.
    mtc.ConfigureTenant('3', b => b.RegisterType<Tenant3Dependency>().As<IDependency>().InstancePerDependency());

    其实我觉得就这么简单。同样,只要您不尝试重新配置现有租户,您应该没问题。

    关于asp.net-mvc - Autofac:自定义 LifetimeScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15317603/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com