2010-12-06 7 views
3

현재 MVC3 웹 응용 프로그램에서 작업 중이며 Ninject에 새로운 문제가 있습니다.MVC3 컨트롤러 생성자 + Ninject

public class TestController : Controller 
{  
    public IRepository<CustomerModel> rep; 

    public TestController(IRepository<CustomerModel> repository) 
    { 
     this.rep = repository; 
    } 

    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

을 그리고 내 Ninject에 모듈 :

내 컨트롤러에 다음 코드를 사용하고이에 대해 정의 된 매개 변수가없는 생성자 :

public class RepositoryModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind(typeof(IRepository<>)).To(typeof(Repository<>)); 
    } 
} 

것은 그러나 이것은 단지 나에게 "System.MissingMethodException를 던졌습니다 목적." 인덱스 뷰를 렌더링하려고 할 때.

그때 추가하면

: 그것은 작동

public class TestController : Controller 
{  
    public IRepository<CustomerModel> rep; 

    public TestController() : this(new Repository<CustomerModel>(new XenCRMEntities())) { } 

    public TestController(IRepository<CustomerModel> repository) 
    { 
     this.rep = repository; 
    } 

    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

하지만 새 생성자를 볼 수있는 거의 IOC의 전체 지점을 깰 :

public TestController() : this(new Repository<CustomerModel>(new XenCRMEntities())) { } 

처럼 나의 실제로 TestController 보인다.

어떻게 수정합니까?

미리 감사드립니다.

+0

어떤 컨트롤러 팩토리 구현이 사용중인 정말 나쁜 추락 한 내 코드 사용을 변경 ? –

+0

난 그냥 일반 MVC 컨트롤러 공장 구현을 사용하고 있습니다. 이 문제를 해결하기 위해 사용자 지정 컨트롤러 팩터 리를 만들 수 있다는 것을 읽었지 만, 사람들이 Structuremap을 사용하는 예제 만 찾을 수있었습니다. – ebb

+0

http : //www.planetgeek을 참조하십시오.chv/2010/11/13/official-ninject-mvc-extension-gets-support-for-mvc3/ –

답변

2

그것은이 아니 컨트롤러 먹으 렴을 망치는 것을 알 수 있지만, Ninject에 제대로 내 일반 저장소 및 IRepository 바인딩 해달라고 - 나는 따라서 새로운 게시물을 만들었습니다 : Ninject + Bind generic repository

2

일반 MVC 컨트롤러 팩토리는 DI를 수행하지 않으므로 컨트롤러 팩토리를 변경해야합니다.

당신은에 설치 MVC + Ninject에이 방법에 대한 자세한 내용은 여기를 찾아보실 수 있습니다 : MVC3 + Ninject - How to?

+0

내가 만나는 문제가 다른 유형이고 해당 게시물과 관련이 없기 때문에이 문제는 내 문제를 해결합니다. – ebb

+0

미안하지만, 내가 너무 명확하지 않았을 수도 있습니다. 매개 변수없는 생성자를 추가하지 않으려면 Ninject를 사용하여 종속성 삽입을 수행하는 컨트롤러 팩터 리로 변경해야합니다. Ninject 팀이 제공하는 것이 있으므로 하나 추가하는 것은 매우 쉽습니다. 다운로드 및 지침을 얻을 수 있습니다. [here] (https://github.com/ninject/ninject.web.mvc) – CGK

+0

흠 ... o : o (atleast for MVC3) 링크에서 컨트롤러 팩토리를 찾습니다.) – ebb

4

짧은 테스트는 MVC3 확장에 제네릭 바인딩에 문제가 없다는 것을 보여 줬습니다. 컨트롤러에 문제가 없지만 알 수없는 종속성이 있기 때문에 저장소를 만들 수 없다고 생각합니다.

그러나 이것은 요청한 형식을 확인할 수 있지만 종속성 중 하나가 해결되지 않을 때마다 종속성 해결자를 약간 변경하여 Ninject 스택 추적을 보여줍니다. 더 나은 스택 추적을 얻으려면 빌드 서버에서 최신 버전으로 업데이트하십시오.

0

이 바인딩을 사용하지 마십시오!

귀속 (대해서 typeof (IRepository <>) 내지 대해서 typeof (리포지토리 <>)).;

나는이 바인딩과 서버가 하나의 사용자를 위해 작동하지만 수천 요청하는 것이

사용

Bind(typeof(IRepository<IClass>)).To(typeof(Repository<Class>)) 
관련 문제