在 WebApi2 中使用 Autofac 作用域



我已经浏览了大部分文档,但我仍然不确定依赖范围的具体用法。

当我的请求命中我的控制器时,我通常可以使用控制器的依赖项(通过构造函数注入提供(,而不必担心它。

但是,我正在写一个Delegating Handler

public class MyHandler: DelegatingHandler
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
// I need IMyService here
return await base.SendAsync(request, cancellationToken);
}

我最初尝试做:

using(var scope = request.GetDependencyScope()){
var service = scope.GetService(typeof(IMyService));
}

但是,虽然它有效 - 似乎关闭了范围并阻止我的控制器正确初始化。

我可以做:

{
var requestScope = request.GetDependencyScope();
var scope = requestScope.GetRequestLifetimeScope();
var service = scope.Resolve<IMyService>();
// use service
return await base.SendAsync(request, cancellationToken);
}

但这不会造成资源泄漏吗?请求完成后,是否会处置RequestLifetimeScope

如果您能为我提供使用 Autofac 解析服务的正确、最佳实践风格的基本委派处理程序的示例,这将对我有很大帮助。

请求级依赖项范围是为您创建和释放的。只需获取它(不在using内(,并在需要时从中解决。当然,请确保 Autofac 中间件在您的中间件之前执行,以便为您创建范围;如果是这样的话,它也会在你之后清理。自然而然。

最新更新