2011-04-08 3 views
0

나는 다음과 같은 서비스 인터페이스가 있습니다방법은 컨트롤러 액션 메소드에서 사용할 수 없습니다

public class GrantApplicationService : IGrantApplicationService 
{ 
    public IEnumerable<GrantApplication> GetAll() 
    { 
     // Code here 
    } 

    public EditGrantApplicationViewModel CreateEditGrantApplicationViewModel() 
    { 
     // Code here 
    } 
} 

내 컨트롤러 :

public class GrantApplicationController : Controller 
{ 
    private IGrantApplicationService grantApplicationService; 

    public GrantApplicationController(IGrantApplicationService grantApplicationService) 
    { 
     this.grantApplicationService = grantApplicationService; 
    } 

    public ActionResult Create() 
    { 
     // I am trying to create my view model like this and populate it with data 
     EditGrantApplicationViewModel viewModel = grantApplicationService.CreateEditGrantApplicationViewModel(); 

     return View(viewModel); 
    } 
} 
여기

public interface IGrantApplicationService 
{ 
    IEnumerable<T> GetAll(); 
} 

인터페이스의 내 구현

내 Create 메서드에서 볼 수 있지만 서비스를 통해 내 뷰 모델을 만들려고하지만 whe n을 클릭하십시오. CreateEditGrantApplicationViewModel을 선택하는 옵션이없는 것처럼 보이지만 GetAll 만 존재합니다. 왜 이런거야? 나는 모든 정확한 참조를 가지고있다.

답변

1

당신은 당신의 IGrantApplicationService 인터페이스에

EditGrantApplicationViewModel CreateEditGrantApplicationViewModel(); 

를 정의 할 필요가있다.

현재 컨트롤러는 인터페이스가 클래스가 아닌 인터페이스에 대해서만 알고 있습니다.

+0

GrantApplicationService 인스턴스를 주입합니다. –

+0

그러나 정의에는 FindAll() 메서드 만 있습니다. 컴파일러는 컴파일 타임에 전달할 인터페이스의 구현을 알지 못합니다. 리플렉션을 통해 메소드를 호출해야합니다 (이 상황에서 안티 패턴이 됨) –

1

grantApplicationService 필드는 IGrantApplicationService으로 선언되었지만 CreateEditGrantApplicationViewModel 메서드는 인터페이스에 없습니다. 인터페이스에 CreateEditGrantApplicationViewModel을 추가하기 만하면됩니다.

관련 문제