簡體   English   中英

在WebApi2中使用Autofac范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM