c# - 具有不同生命周期的 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
解决方案
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 核心的指导
推荐阅读
- search - 如果使用欧几里得距离启发式的 A* 搜索允许对角线移动,它仍然是最优的吗?
- java - 注释和方法调用之间的 Mockito 区别
- python - 使用 tf.data 实现 tensorflow 输入管道时出错
- excel - 如何在 Excel 中创建部分字符串搜索功能,查看整个数组
- c - 如何化解这个二元炸弹阶段 4
- linux - 使用 NVidia GPU 的屏幕 EGL 显示
- javascript - 无法在网格 Sencha Extjs 中选择字段
- c - 我不明白为什么它不显示文件中的浮点数(二进制文件)
- excel - 在 Excel 中使用 VBA 为“Workbooks.Add”函数设置默认列宽
- mysql - 在sql中更新表