2014-07-24 3 views
0

나는 Ninject에 InRequestScope를 사용 PerRequestResourceProvider의 인스턴스를 만들려면 :ASP.NET MVC + Ninject에 : InRequestScope

public class PerRequestResourceProvider: IPerRequestResourceProvider 
{ 
    priavte readonly _perRequestResorceInstance; 
    public PerRequestResourceProvider() 
    { 
     _perRequestResorceInstance = new PerRequestResource(); 
    } 
    public PerRequestResource GetResource() 
    { 
     return _perRequestResorceInstance; 
    } 
} 

public interface IPerRequestResourceProvider 
{ 
    PerRequestResource GetResource(); 
} 

을 내 NinjectDependencyResolver에서 :

..... 
kernel.Bind<IPerRequestResourceProvider>.To<PerRequestResourceProvider>().InRequestScope(); 

내가 몇 가지 클래스에 IPerRequestResourceProvider를 주입. 그러나 PerRequestResourceProvider 생성자에 중단 점을 추가하면 PerRequestResourceProvider가 요청 당 한 번씩 세 번 생성되고 요청마다 한 번씩 생성되지는 않습니다. 뭐가 문제 야?

업데이트 : 소스 코드 ttps :

+0

이 경우 문제를 재현하는 최소한이지만 완전한 샘플을 게시해야합니다. 그래서 우리는 당신이 버그 리포트를 만들거나 문제를 해결할 수 있도록 도와줍니다. 최소한의 솔루션을 만들어 업로드하고 링크 할 수 있습니다. – BatteryBackupUnit

+0

@BatteryBackupUnit 소스 코드를 추가했습니다. https://bitbucket.org/maximtkachenko/ninjectinrequestscope/src – mtkachenko

+0

@BatteryBackupUnit HomeController contsructor가 고정되었지만 결과가 동일합니다. 요청시 PerRequestResourceProvider 생성자가 3 회 호출되었습니다. – mtkachenko

답변

0

//bitbucket.org/maximtkachenko/ninjectinrequestscope/src 코드 두 가지 문제가 있습니다

  1. 해서 Ninject가 제대로 초기화 점점되지는. Ninject.MVCx 패키지 중 하나가 필요합니다 (사용중인 MVC 버전에 따라 다름). 올바르게 구성하려면, 참조 : 당신은 이렇게 바인딩 IPerRequestResourceProvider에 정의 된 .InRequestScope()이 어떤 효과를 참가하는, HomeControllerPerRequestResourceProvider (클래스 형), 그리고 IPerRequestResourceProvider (인터페이스 유형)를 주입하는 http://github.com/ninject/ninject.web.mvc

  2. . HomeController 생성자를 변경하여 삽입 된 inteface 유형을 얻으십시오.


해서 Ninject는 instantiatable (비 추상, ..) 클래스에 대한 바인딩을 필요로하지 않습니다. 이것이 잘못된 바인딩이 사용될 때 명확하지 않은 이유입니다.