1

有没有办法让 Autofac 总是在新的生命周期范围内解析类型?

IE。

Container.Resolve<MyHandler>().Whatever();

现在我必须这样做:

Container.BeginLifetimeScope().Resolve<MyHandler>().Whatever();

如果能够将 MyHandler 注入一个类并知道 MyHandler 是它自己的范围,那就太好了。

4

1 回答 1

2

Autofac 没有提供一种方法来自动启动每个组件解析的新生命周期范围。

创建生命周期范围实际上是一个您需要非常严格控制的过程。生命周期范围不仅有助于确定组件解析的范围,还可以管理您解析的组件的确定性处置。从内存管理的角度来看,您不应该只启动生命周期范围而不在完成后处理它们。未能处理您创建的范围很容易导致内存泄漏。

这就是为什么您总是BeginLifetimeScope在语句或非常紧密集成的场景(如 ASP.NET 请求生命周期)中看到的原因using- 因此您可以在已知位置启动范围并确保结束/处置它。子生命周期范围在创建后不会自动为您处置 - 由您来进行清理。

Autofac wiki在这里有一些关于生命周期范围的好信息

于 2013-10-01T22:38:27.767 回答