2009-06-28 4 views
10

저는 NInject 바인딩에 익숙하지 않습니다. 여기 NInject가 설명하는 내용이 있습니다. 유형NInject에서 MembershipProvider를 바인딩 할 때 InSingletonScope를 사용해야합니까?

  • TransientBehavior -A 새로운 인스턴스는 하나가 요청 될 때마다 생성 될 것이다.
  • SingletonBehavior - 형식의 인스턴스가 하나만 만들어지고 이후 인스턴스마다 동일한 인스턴스가 반환됩니다.
  • OnePerThreadBehavior - 유형 당 하나의 인스턴스가 스레드별로 생성됩니다.
  • OnePerRequestBehavior - 웹 요청 당 하나의 유형 인스턴스가 생성되며 요청이 끝나면 파괴됩니다.

MembershipProvider를 SqlMembershipProvider에 바인딩하려는 경우 SQL 멤버 자격 공급자가 하나만 필요하기 때문에 SingletonBehavior를 사용해야합니까?

+0

참고 : http://stackoverflow.com/questions/2753424 –

답변

13

ASP.Net 이미 정적 회원 클래스를 통해 현재 멤버 자격 공급자의 정적 인스턴스를 제공하고 정적 제공 속성입니다. Memberhip.Provider 정적이기 때문에, 이미 싱글 같은 종류의, 그래서 행동은 당신이 적용하려고,

Bind<MembershipProvider>() 
    .ToMethod(ctx => Membership.Provider); 

다시 다음 가능성이 위해 Application_Start 방법으로하고 다음과 같이 보일 것이다 바인딩 그다지 중요하지 않습니다.

위의 스 니펫에서 아무런 동작을 지정하지 않으면 Ninject는 기본적으로 일시적인 동작을합니다. 바인딩 이런 종류의, 그 Membership.Provider 때마다 MembershipProvider 형식을 삽입해야 할 때마다 반환하는 람다 전화 금액 것입니다 믿습니다.

내가 명시 적으로 Ninject에 가능성이 효과 "캐시"람다 그것은 는 MembershipProvider를 주입 할 필요가 처음에 의해 반환 된 값의를 실행하는 오버 헤드를 절약하는 것처럼 싱글 동작을 지정하는 인수가있을 수도있을 것 같군요 람다. 나는이 상황에서 Ninject가 작동하는 방법을 100 % 확신하지는 못했지만 그것이 합리적이라고 생각합니다.

모두 내 개인적인 선호는 OnePerRequestBehavior을 사용하는 것이고,이 방법은 Ninject가 각 요청에 대해 한 번 내 람다를 호출한다는 것을 알고 있습니다. 확실하지는 않지만, 제공자를 얻는 아이디어가 마음에 들었습니다. Membership.Provider 각 요청마다 한 번씩 요청하십시오. Membership.Provider 얻을 수 있지만 그래도 알 수는 있겠지만 리플렉터로 충분히 파면.

Bind<MembershipProvider>() 
    .ToMethod(ctx => Membership.Provider) 
    .Using<OnePerRequestBehavior>(); 

행운을 빈다. 죄송합니다. 질문이 너무 오래 여기에있었습니다!

+0

감사합니다. 사용자가 로그 오프하고 다른 사람이 로그온하는 경우 감사합니다. Ninject는 이전 사용자를 기다리지 않습니다. 확인해 주시겠습니까? – Haroon

관련 문제