首頁 >後端開發 >C++ >Ninject 如何管理 DbContext 生命週期和依賴注入?

Ninject 如何管理 DbContext 生命週期和依賴注入?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-25 12:30:12577瀏覽

How Does Ninject Manage DbContext Lifetime and Dependency Injection?

Ninject:處理對像生命週期和依賴注入

問題1:DbContext 清理

何時使用Ninject,您無需擔心手動處置DbContext 實例。 Ninject 會自動處理任何未與 InTransientScope() 綁定的一次性物件。由於您很可能使用 InParentScope() 或其他作用域,因此當垃圾收集器收集對應作用域時,Ninject 將處理處置。

問題 2:避免在基本控制器中註入 DbContext

通常建議避免使用 MVC 控制器的基類。它們往往會違反單一責任原則並導致上帝的對象。相反,請考慮使用全域註冊的篩選器來處理橫切關注點。

範例:

假設您要依照目前使用者設定通用的 ViewBag 屬性。您可以像這樣建立一個IAuthorizationFilter:

public class CurrentUserProfileFilter : IAuthorizationFilter
{
    private readonly MyDbContext context;

    public CurrentUserProfileFilter(MyDbContext context)
    {
        this.context = context;
    }

    public void OnAuthorization(AuthorizationContext filterContext)
    {
        // Set ViewBag properties based on current user information from DbContext
    }
}

然後,在您的FilterConfig 中全域註冊過濾器:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        FilterProviders.Providers.Insert(0, new GlobalFilterProvider(DependencyResolver.Current));
    }
}

這將自動在每個請求上設定ViewBag 屬性,而不需要您將MyDbContext 注入您的控制器。

問題3:惰性DB 上下文實例化

預設情況下,Ninject 急切地創建對象,但可以使Ninject 綁定的對象變得惰性(僅在第一次請求時建立)。

但是,不建議這樣做DbContext 因為它有大量的初始化開銷,所以推遲它的創建是沒有意義的。另外,DbContext 在使用完畢後應該被釋放,並且它的生命週期應該被相應地控制。

以上是Ninject 如何管理 DbContext 生命週期和依賴注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn