2016-10-24 4 views
0

내 컨트롤러에서 사용자 지정 개체를 반환하는 데이터 인터페이스를 구현하고 싶습니다. 모든 객체는 JSON 속성에 의해 직렬화 및 장식됩니다. 그래서 내 컨트롤러 방법은 간단하게 :ASP.NET MVC 컨트롤러에서 데이터 인터페이스 구현 및 JSON 반환

public class MyController : Controller, IMyInterface 
    { 
     public Foo[] GetFoosByName(string name) 
     { 
      return new Foo[]{new Foo(name), new Foo(name)} 
     } 
    } 

나는 단순히 "Foo []"응답을 얻습니다. 내가 얻고 자하는 것은 JSON으로 직렬화 된 Foo 객체이다.

public JsonResult GetFoosByName(string name) 
    { 
     return Json(new Foo[]{new Foo(name), new Foo(name)}); 
    } 

을하지만 난 쉽게 유지 관리 할 수있는 방법으로 IMyInterface를 구현 할 수 없습니다 :
난 쉽게 JsonResult로 내 대답을 변경하여이 작업을 수행 할 수 있습니다.

JsonResult를 반환하면서 자동으로 동작을 가져올 수있는 방법에 대한 아이디어는 있지만 원래 반환 유형은 그대로 유지하고 있습니까?

답변

1

일반적으로 나는 그런 패턴을 추천합니다. MVC 컨트롤러는 이상적으로 최상위 계층의 일종이어야하며, 인터페이스를 구현해서는 안된다고 생각합니다. 이러한 인터페이스는 MVC 컨트롤러 아래의 서비스 계층에 구현해야합니다.

그러나 여전히 그렇게하고 싶다면 명시 적 구현과 같이 사용할 수 있습니다.

public class MyController : Controller, IMyInterface 
{ 
    public JsonResult GetFoosByName(string name) 
    { 
     return Json(((IMyInterface)this).GetFoosByName(name)); 
    } 

    Foo[] IMyInterface.GetFoosByName(string name) 
    { 
     return new[] { new Foo(name) }; 
    }  
} 
+0

내가 그것을 일반적으로 따를 수있는 좋은 패턴이 아닌, 내가 특별한 상황이 :) 귀하의 제안에 대해서는 동의 문제는 내일 IMyInterface이있는 경우 새로운 방법이 추가 한 코드를 유지하는 사람이를 업데이트 할 것이다 명시 적 구현이지만 새로운 JsonResult 메서드를 추가해야한다는 것을 알지 못할 수도 있습니다. –

+0

옵션이 너무 많습니다. 인터페이스는 인터페이스입니다. 나는 지금 다른 생각이 없다. –

+0

아마도'IMyInterfaceMVC'와 같은 상속 된 인터페이스를 도입 할 수 있습니다. 여기서'JsonResult'를 반환하는 메소드를 'new'할 수 있습니다. 새로운 메소드가 추가되면 컨트롤러에 에러가 생기고 액션 메소드를 추가 할 때 리턴 타입에 에러가 생기므로'IMyInterfaceMVC '도 강제 업데이트해야합니다. 명시 적으로 기본 인터페이스를 구현하고 'MVC'인터페이스를 암시 적으로 구현할 수 있습니다. 아마. 그래도 아이디어는 테스트하지 않았습니다. –

관련 문제