首页 > 解决方案 > 具有不同生命周期的 Autofac 注册模块取决于应用程序(控制台或 Web)

问题描述

我有一个控制台应用程序和 Web API 使用的类库。我正在使用 Autofac 模块注册依赖项,如下所示:

public class TenantAutofacModule : Autofac.Module
  {
    protected override void Load(ContainerBuilder builder)
    {
      builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
        .Where(t => t.Name.EndsWith("Service"))
        .AsImplementedInterfaces()
        .InstancePerTenant();
    }
  }

上面的生命周期InstancePerTenant适用于 Web API,不适用于控制台应用程序,因为生命周期范围需要 HTTP 请求。

我想知道TenantAutofacModule是否有办法知道谁是调用者,以便我可以使用InstancePerTenant或注册生命周期InstancePerLifetimeScope

标签: c#autofac

解决方案


InstancePerTenant 上面的生命周期适用于 Web API,不适用于控制台应用程序,因为生命周期范围需要 HTTP 请求。

InstancePerTenant不需要 HTTP 请求。这取决于您的ITenantIdentificationStrategy实施。

配置容器时,可以根据配置选择不同的实现

if(config.useConsole) {
    builder.RegisterType<ConsoleTenantResolverStrategy>()
           .As<ITenantIdentificationStrategy>()
           .SingleInstance();
} else {
    builder.RegisterType<WebTenantResolverStrategy>()
           .As<ITenantIdentificationStrategy>()
           .SingleInstance();
}

并获得自己的config,您可以阅读ASP.NET Core中的配置,它将为您提供 .net 核心的指导


推荐阅读