[英]Autofac DI for RequestContext.Principal using WebAPI2 in a unit test
[英]Using Autofac scopes in WebApi2
我已經閱讀了大多數文檔,但仍不確定依賴范圍的具體用法。
當我的請求到達我的控制器時,我通常可以使用控制器的依賴項(通過構造函數注入提供),而不必為它擔心。
但是,我正在編寫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));
}
但是,盡管它起作用了,但似乎關閉了作用域,甚至阻止了我的Controller正確初始化。
我可以做:
{
var requestScope = request.GetDependencyScope();
var scope = requestScope.GetRequestLifetimeScope();
var service = scope.Resolve<IMyService>();
// use service
return await base.SendAsync(request, cancellationToken);
}
但這不會造成資源泄漏嗎? 請求完成后會否處理RequestLifetimeScope
?
如果您可以使用Autofac解析的服務為我提供正確的,最佳實踐樣式的基本DelegatingHandler示例,那將對我有很大幫助。
請求級別的依賴關系范圍是為您創建並為您分配的。 只需獲取它(不在using
),然后根據需要從中解決。 當然,請確保在您的中間件之前執行Autofac中間件,以便可以為您創建范圍。 如果是這種情況,它也會在您之后進行清理。 自動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.