首页 >后端开发 >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