簡體   English   中英

如何解決/注入基於屬性的依賴關系 class?

[英]How to Resolve/inject Dependency for Attribute based class?

我正在 ASP.NET Core 6 Web API 中創建以下屬性 class。

我需要從此 class 進行數據庫調用,並希望獲得已在依賴容器中注冊的dbContext

如何將 dbcontext 注入我的customAuthorization class?

[AttributeUsage(AttributeTargets.Class)]
public class CustomAuthorization : Attribute, IAuthorizationFilter
{
   private readonly IServiceProvider _serviceProvider;
    
   public CustomAuthorization(IServiceProvider serviceProvider)
   {
          _serviceProvider = serviceProvider;
   }


   public void OnAuthorization(AuthorizationFilterContext filterContext)
   {
       ...................
   }

}

[CustomAuthorization()]
public class OrganizationController : CustomControllerBaseClass
{
    // .......
}

IAuthorizationFitler有一個OnAuthorization(AuthorizationFilterContext filterContext)方法,不是嗎?
您可以使用filterContext.HttpContext.ServiceProvider.GetRequiredService...

[AttributeUsage(AttributeTargets.Class)]
public class CustomAuthorization : Attribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext filterContext)
    {
        var context = filterContext.HttpContext.ServiceProvider.GetRequiredService<Your_DbContext>();  
        ...                                      
    }
}

雖然,我不知道AuthorizationFilter的 scope,無論它是 singleton、作用域還是瞬態:如果它是 singleton,您可以自己創建一個 scope:

using(var scope = filterContext.HttpContext.ServiceProvider.CreateScope())
{
    var context = scope.ServiceProvider.GetRequiredService<Your_DbContext>();  
    ...                                      
}  

我不知道我是在某個地方錯了還是有更簡單的方法,但這是我的快速反應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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