Stellen Sie sicher, dass der controller hat einen parameterlosen public-Konstruktor
Bekomme ich diesen Fehler
Ist ein Fehler aufgetreten beim Versuch, einen Domänencontroller zu erstellen vom Typ 'AnalyticController'. Stellen Sie sicher, dass der controller hat einen parameterlosen public-Konstruktor.
Code funktioniert in der Testumgebung aber nicht auf den Produktions-server.
Jede Idee, was könnte das problem verursachen?
Dies ist mein controller
public class AnalyticController : ApiController
{
private AnalyticBLL analyticBLL = new AnalyticBLL();
//POST api/status
public void Post(AnalyticDTO analyticDTO)
{
if (!analyticBLL.Register(analyticDTO))
helpers.BusinessLayer.CreateResponseException(analyticBLL.Errors);
}
}
- Ihre Steuerung (wie hier gepostet), hat einen parameterlosen public-Konstruktor. Ihre real-controller hat wahrscheinlich einen anderen Konstruktor, nicht hier gepostet, und als ein Ergebnis der parameterlosen default-Konstruktor wird nicht generiert.
ApiController
hat einen protected-Konstruktor, sondern die erbende Klasse scheint nicht zu wissen, dass - msdn.microsoft.com/en-us/library/...- Die erbende Klasse weiß über den Konstruktor in der Basisklasse. Wenn Sie es nicht sehen konnte, jeder Konstruktor in der Basisklasse, wäre es nicht einmal möglich sein, zu Erben von der Basisklasse (da die Instanz-Konstruktor(en) muss die Kette einer (vorhandenen und sichtbar) - Konstruktor in der Basisklasse). (Abgesehen von den pathologischen Fall, wo alle Instanz-Konstruktoren Kette von Konstruktoren in dieser Klasse mit
:this(...)
in einer zyklischen Art und Weise.) - Absolut einverstanden, aber komischerweise die Lösung funktioniert für die OP, auch wenn es dies tun sollte standardmäßig.
- Nicht sicher, was du meinst. Als Kris Vandermotten gesagt, das Original-Plakat einige explizite Instanz-Konstruktor, der unterdrückt die Generierung eines "automatischen"
public
default-Konstruktor. Wenn du weglassen, die Kette-andere- - Konstruktor-syntax in einer Instanz-Konstruktor, das entspricht: base()
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie einen öffentlichen parameterlosen Konstruktor und das problem verschwindet:
Kommt drauf an, wie du bist Umgang mit DI (dependency injection). Standardmäßig Controller brauchen paramaterless Konstruktor, und Sie haben, um so etwas wie Einheit oder Ninject zu behandeln DI. Ich sehe, du bist inhereiting von ApiController, so dass, wenn Sie mit Ninject stellen Sie sicher, dass Sie zum download Ninject für die Web-API. Wenn Sie bereits wissen, alles, was ich Euch gerade erzählt hat, dann müssen Sie zu geben, mehr Informationen. Was ist dein setup? Was verwenden Sie für DI?
Ich wurde immer diese Fehlermeldung, denn ich hatte eine Exception aufgetreten, die in meinem parameter-ful-Konstruktor. Es hatte nichts zu tun mit die eine parameterlose Konstruktor trotz der Fehlermeldung.
Weiß nicht, ob das wird helfen, jemand anderes. Ich build & dann laufen meine app gegen web-services alle auf meinem lokalen (dev) box. Dann, bevor ich auf die Produktion bereitstellen, ich meine app zeigen, um die bestehende Produktion von web services. Dies funktioniert in der Regel, aber dieses mal hat es geklappt "in dev", aber gab mir dieses "Stellen Sie sicher, dass der controller hat einen parameterlosen public-Konstruktor" Fehlermeldung "in der Produktion" (naja, nicht wirklich in der Produktion, sondern gegen die Produktion von web-services).
Ist keine dieser Lösungen, schien das problem für meinen code und wenn ich mein code bereitgestellt, um die Produktion, ich nicht bekomme diese Fehlermeldung, wenn es alle in der Produktion. Meine Vermutung ist, dass es mit den unterschiedlichen Versionen des NuGet-Pakete zwischen meiner dev-box & Produktion. Ich werde untersuchen, ich wollte doch nur zu bieten, falls andere ein ähnliches "arbeitet gegen dev aber nicht prod" - situation. Es kann ein Umwelt-Problem (je nachdem, was du damit meinst funktioniert nicht "in prod").