3 Stimmen

Automatisch einen Controller um einen Dienst in ASP.NET MVC wickeln

Der Titel der Frage ist vielleicht nicht ganz klar, aber was ich tun möchte, ist so etwas wie dies:

So habe ich meine Anwendung aufgebaut

App.Bereich App.Dienste Anwendung.Web

Was ich möchte, ist, wenn ich etwas anfordere wie /api/OrderProcessor/GetAllOrder wird die Methode GetAllOrder en App.Services.OrderProcessorService .

Die Methode gibt ein IList<Order> und ich möchte es in JSON nach einem bestimmten Format serialisiert werden (ich bin mit ExtJS tatsächlich), um vielleicht etwas wie:

{ 
  success: true,
  totalCount: 10,
  list: [ { ... }, { ... } ]
}

Ich kann weitergehen und die Dienste als Controller einrichten, aber ich möchte nicht, dass die Dienstschicht mit Präsentationsmaterial verunreinigt wird.

Wie kann ich einen Wrapper-Controller wie diesen erstellen?

Ich möchte keine Attribute auf die Service-Klasse selbst anhängen, und wäre wahrscheinlich schön, wenn ich es mit IoC konfigurieren kann, wo durch vielleicht später ich die Ausgabe XML oder vielleicht die Fähigkeit, eine DTO-Klasse anstelle der ursprünglichen Domain-Klasse verwenden möchten.

Irgendeine Idee?

2voto

Kevin Swiber Punkte 1456

Es hört sich an, als ob Sie versuchen würden, eine RESTful-Dienst .

Mit einem RESTful-Dienst kann die /api/OrderProcessor/GetAllOrders URI würde Ihre JSON-Objekte zurückgeben.

Wenn das der Fall ist, würde ich WCF anstelle von ASP.NET MVC verwenden.

Um mit WCF, REST und JSON zu beginnen, lesen Sie die WCF REST Starter Kit Vorschau 2 auf Codeplex. Es gibt ein schnelles Beispiel für die Rückgabe von JSON aus einem WCF-Dienst in diesem Blogbeitrag I gefunden von Ben Dewey.

Viel Glück!

0voto

Andrew Matthews Punkte 2910

Sie könnten etwas wie PostSharp's OnMethodInvocationAspect verwenden, um jeden Aufruf Ihrer Controller-Methode abzufangen und als Relais zu ähnlich benannten Methoden auf einem bestimmten Proxy-Objekt zu fungieren...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X