有没有办法让 Autofac 总是在新的生命周期范围内解析类型?
IE。
Container.Resolve<MyHandler>().Whatever();
现在我必须这样做:
Container.BeginLifetimeScope().Resolve<MyHandler>().Whatever();
如果能够将 MyHandler 注入一个类并知道 MyHandler 是它自己的范围,那就太好了。
有没有办法让 Autofac 总是在新的生命周期范围内解析类型?
IE。
Container.Resolve<MyHandler>().Whatever();
现在我必须这样做:
Container.BeginLifetimeScope().Resolve<MyHandler>().Whatever();
如果能够将 MyHandler 注入一个类并知道 MyHandler 是它自己的范围,那就太好了。
Autofac 没有提供一种方法来自动启动每个组件解析的新生命周期范围。
创建生命周期范围实际上是一个您需要非常严格控制的过程。生命周期范围不仅有助于确定组件解析的范围,还可以管理您解析的组件的确定性处置。从内存管理的角度来看,您不应该只启动生命周期范围而不在完成后处理它们。未能处理您创建的范围很容易导致内存泄漏。
这就是为什么您总是BeginLifetimeScope
在语句或非常紧密集成的场景(如 ASP.NET 请求生命周期)中看到的原因using
- 因此您可以在已知位置启动范围并确保结束/处置它。子生命周期范围在创建后不会自动为您处置 - 由您来进行清理。
Autofac wiki在这里有一些关于生命周期范围的好信息。