c# - Autofac 实现接口的类型列表 / C# Asp.net
问题描述
我在 NServiceBus 调度程序中遇到了 Autofac 和内存泄漏的问题。但幸运的是我解决了这个问题。
BeginLifetimeScope / DbContext 的 Autofac 和内存泄漏已被处理 / C# asp.net
但现在我正在尝试稍微重构这部分。
我的代码:
public void Start()
{
List<Type> jobTypes = new List<Type> { typeof(ExpiryDateTask) };
foreach (var jobType in jobTypes)
{
_schedule.Every(TimeSpan.FromSeconds(30), () =>
{
using (var scope = _lifetimeScope.BeginLifetimeScope())
{
var job = scope.Resolve<IJob>();
job.Run();
}
});
}
}
我该如何重构这部分:
List<Type> jobTypes = new List<Type> { typeof(ExpiryDateTask) };
- 该列表应以某种方式由实现 IJob 接口的所有类型的任务填充。var job = scope.Resolve<IJob>();
我认为这是错误的,应该看起来更像var job = resolveJob(jobType)
- 所以基本上基于类型。
@编辑
点 (1) 通过获取所有实现接口的类型来解决
解决方案
对于您问题的第二部分,您可以使用 Autofac子容器注册来做您想做的事情:
foreach (var jobType in jobTypes)
{
_schedule.Every(TimeSpan.FromSeconds(30), () =>
{
using (var scope = _lifetimeScope.BeginLifetimeScope(builder =>
{
builder.RegisterType(jobType).As<IJob>();
}))
{
var job = scope.Resolve<IJob>();
job.Run();
}
});
}
这样,实现的类也IJob
将受益于构造函数依赖注入。
推荐阅读
- scala - spark-submit 在线程“main”java.lang.SecurityException 中给出异常:签名无效
- java - JRebel:javax.servlet.ServletException:javax.servlet.ServletException:过滤请求失败
- tomcat7 - 使用 Hibernate 5.3.7 配置的 JCache 引发异常原因:java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
- java - 使用 gson.fromJson 时如何修复 NumberFormatException
- tcl - 多次使用 TK 剪贴板
- javascript - 如何让我的按钮在移动设备上工作?
- javascript - 在扩展初始化之前阻止 chrome 网络请求
- r - R:未找到分配有 read_csv 数据的变量
- javascript - 为什么在heroku中托管时导航器的剪贴板对象未定义?
- c - 如何使用指针使用 malloc 存储多个字符串