2016-10-24 5 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

'JsonResult'を返すメソッドを' new'することができる 'IMyInterfaceMVC'のような継承されたインターフェースを導入することができます。新しいメソッドが追加されると、コントローラにエラーが発生し、アクションメソッドを追加すると戻り値の型にエラーが発生するので、 'IMyInterfaceMVC'も強制的に更新されます。暗黙的に基本インターフェースを実装し、暗黙的に '... MVC'インターフェースを実装することができます。多分。テストしていない、ちょうどアイデア。 –

関連する問題