2016-04-10 5 views
0

Ich habe eine MVC-Anwendung in C# entwickelt. Ich habe jetzt eine Anforderung, Web-Services (API) für andere interne Systeme und später für andere externe Systeme verfügbar zu machen, um die API aufzurufen.Verwenden von MVC Controller zum Speichern von Daten aus Windows Communication Foundation (WCF)

Ich habe ein neues WCF-Projekt in der gleichen Lösung wie die MVC-Anwendung implementiert. Es gibt kein Problem beim Abrufen einer Beispielanforderung und einer Antwort vom WCF-Webdienst.

Die Lösung, der ich folgen möchte, ist die Verwendung der gleichen Business-Logik-Ebene für alle Quellen. Die Business-Logik-Schicht befindet sich derzeit in der MVC-Anwendung und hat einen Anstand im ModelState, um neue/geänderte Datensätze mithilfe von Entity Framework zu validieren und schließlich zu speichern.

Aufgrund dieser Abhängigkeit von ModelState kann ich nicht einfach den Service Layer ohne den ModelState aufrufen, der natürlich zu MVC gehört.

Ich erstellte einen MVC-Controller, der als mein Gateway zwischen der Business-Schicht und der WCF-Schicht fungieren würde. Egal was ich mache, kann eine Aktion nicht direkt im Controller aufrufen. Der Controller erbt von der Controller-Klasse, die den Controller scheinbar geschützt hat, um ihn nicht als Objekt von der WCF-Schicht instanziieren zu können.

Ich habe versucht:

APITransactionController controller = new APITransactionController(); 

ich einen Fehler, die ich nicht umgehen kann:

Error CS0122 'APITransactionController.APITransactionController()' is inaccessible due to its protection level 

auch versucht:

var controller = DependencyResolver.Current.GetService<APITransactionController>(); 

Aber die variable Steuerung null zurück .

Irgendwelche Ideen, wie ich das umgehen kann? Irgendwelche anderen Vorschläge? Vielleicht Weg zu gehen, ich bin hier um den falsch ....

+0

Ist es als PUBLIC-Klasse APITransactionController definiert? mit einem öffentlichen Konstruktor? – Mate

+0

Konstruktor war privat. lass mich es öffentlich machen und das nochmal versuchen ... –

+0

Und das war das Problem. Danke, Mann. –

Antwort

0

Check:

  • Ist es als PUBLIC Klasse APITransactionController definieren?
  • Hat es einen öffentlichen Konstruktor?
Verwandte Themen