0
我已經瀏覽了大部分文檔,而且我仍然不確定依賴關係作用域的具體用法。在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解析服務爲我提供正確,最佳實踐樣式的基本DelegatingHandler示例,那將對我有很大幫助。
我試過「我能做」的代碼,它似乎工作正常。如果我理解正確,這是解決我的服務的正確方法嗎? – Gerino
我只是GetDependencyScope並從那裏解決,但是,如果你必須做服務位置而不是DI,那就是這樣。請注意,這不是Autofac特定的 - 這就是Web API的工作原理。 –