>백엔드 개발 >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으로 문의하세요.