2012-04-07 4 views
3

누구나 ninject 초기화 코드의 RegisterServices에서 Membership.Provider를 구성하는 방법을 알고 있습니까? 내 코드에서Ninject, injecting Membership.Provider in Register 서비스 ninject 초기화

:

/// <summary> 
    /// Load your modules or register your services here! 
    /// </summary> 
    /// <param name="kernel">The kernel.</param> 
    private static void RegisterServices(IKernel kernel) 
    { 
     // Put additional bindings here 
     kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>(); 
     kernel.Bind<IUnitOfWork>().To<UnitOfWork>(); 
     kernel.Bind<IUserRepository>().To<UserRepository>(); 
     kernel.Bind<IRoleRepository>().To<RoleRepository>(); 
     kernel.Bind<ISecurityService>().To<SecurityService>(); 
     kernel.Inject(Membership.Provider); 
     kernel.Inject(Roles.Provider); 
    } 

모든 모듈은 kernel.Inject 라인을 제외하고 바인더 제본된다. "이 방법은 응용 프로그램의 사전 시작 초기화 단계에서 호출 할 수 없습니다."라는 오류가 발생합니다.

파일은 표준 nugject.mvc 설치의 NinjectWebCommon입니다. 사용자 지정 멤버 자격 공급자를 만들고 서비스 계층 (SecurityService)을 공급자에 주입하려고합니다.

어떤 도움이 필요합니까?

+1

kernel.Bind<MembershipProvider>().ToMethod(ctx => Membership.Provider); 는 질문에서 접선의 비트,이 블로그 게시물 (http://blog.ploeh.dk/2011/04/27/ProviderIsNotAPattern.aspx)로부터 Mark Seemann (및 의견)에는 제공 업체 및 종속성 주입에 대한 흥미로운 토론이 있습니다. – ngm

+0

이것은 중복입니다, 여기에 더 나은 대답이 있습니다 : http://stackoverflow.com/questions/14412279/how-to-configure-ninject-for-mvc4-custom-membership-provide –

답변

2

나는이 똑같은 문제로 벽에 머리를 쳤다. 나는 마침내 비교적 깨끗한 해결책을 찾았다. here.

기본 접근 방식은 다음과 같습니다 사용자 지정 멤버 자격 공급자 클래스의 모든 종속성 속성에

  1. 사용 [Inject] 속성.

  2. http 모듈을 만들어서 즉시 공급자를 해결하거나 주입하십시오 (Ninject 3는 HttpModules 주입을 지원함).

  3. RegisterServices() 메서드의 마지막 두 inject 문을 공급자 및 새 HttpModule의 바인딩으로 바꿉니다. 이 비록 kernel.Bind<IHttpModule>().To<ProviderInitializationHttpModule>();

+0

이것은 CustomShipProvider와 작동하지만 모든 아이디어 당신이 언급 한 경로를 취하면 사용자 정의 RoleProvider로이 작업을 사용자 정의 RoleProvider의 종속성으로 만드는 방법이 주입되지 않습니다. – Vipresh