【发布时间】:2017-08-15 23:52:47
【问题描述】:
我已经阅读了大部分文档,但我仍然不确定依赖范围的具体用法。
当我的请求到达我的控制器时,我通常可以使用控制器的依赖项(通过构造函数注入提供)而不必太担心。
不过,我写的是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 解析服务的正确、最佳实践风格的基本 DelegatingHandler 示例,那将对我有很大帮助。
【问题讨论】:
标签: c# asp.net dependency-injection asp.net-web-api2 autofac