2017-05-16 1 views
0

Ich habe ein Projekt mit OWIN. Die gesamte Lösung besteht aus fünf Teilen:Das Hinzufügen von Swashbuckle zum Projekt verursacht den Fehler "Stellen Sie sicher, dass der Controller einen parameterlosen öffentlichen Konstruktor hat"

  1. Webanwendung
  2. Kern
  3. Infrastruktur
  4. WebAPI
  5. Tests

Das Projekt gut funktioniert.

Kürzlich plante ich Prahlerei in meinem Projekt zu setzen. Nach einigen Recherchen entschied ich mich für Swashbuckle. https://github.com/domaindrivendev/Swashbuckle#custom-routes

folgte ich seinem Tutorial, indem Sie den folgenden Code zu meinem Startup.cs hinzufügen:

HttpConfiguration Config = new HttpConfiguration(); 
WebApiConfig.Register(Config); 
Config.EnableSwagger((c) => 
{ 
    c.SingleApiVersion("v1", "Flynn Forms"); 
    c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); 
}).EnableSwaggerUi(); 
app.UseWebApi(Config); 

Dann habe ich bei http://localhost:22391/swagger/ui/index meine API-Dokumentation haben. Alle meine APIs funktionieren jedoch nicht mehr. Ich habe Fehler meiner Controller wie:

An error occurred when trying to create a controller of type 'FormTemplateController'. Make sure that the controller has a parameterless public constructor. 

ich nicht einen parameterlosen Konstruktor hatte ... Aber es hat gut funktioniert, bevor Sie die Swashbuckle hinzufügen. Ich habe diesen Fehler gegoogelt, jemand hat vorgeschlagen, dass das Hinzufügen eines parameterlosen Konstruktors diesen Fehler beheben wird. Also mein Controller wurde:

[RoutePrefix("api/develop")] 
public class FormTemplateController : ApiController 
{ 
    private IFormTemplateService formTemplateService; 
    public FormTemplateController() 
    { 
    } 

    public FormTemplateController(IFormTemplateService formTemplateService) 
    { 
     this.formTemplateService = formTemplateService; 
    } 
    [Route("form/{formId}")] 
    [HttpGet] 
    public FormTemplateEntity GetActiveFormTemplateByformId(string formId) 
    { 
     FormTemplateEntity formTemplate = formTemplateService.GetActiveFormTemplateEntityByFormId(formId); 
     return formTemplate; 
    } 
    ....(different APIs) 
} 

Der Fehler ist weg. Aber ich erhalte jetzt einen neuen Fehler, der darauf hinweist, dass formTemplateService null ist.

Ich benutze Castle Windsor als Inversion von Control Container für mein Projekt. Hat Swashbuckle Konflikte mit Castle Windsor? Hat jemand das gleiche Problem und bekommt eine Lösung? Ich bin mir nicht sicher, ob ich genügend Hintergrundinformationen bereitgestellt habe. Wenn Sie weitere Informationen benötigen, lassen Sie sie bitte in den Kommentaren.

Vielen Dank.

+0

Es klingt, als wäre Ihr IoC nicht korrekt eingerichtet? –

+0

Aber mein Projekt funktionierte gut, bevor ich die Swashbuckle hinzufügte. Wenn mein IoC nicht korrekt eingerichtet ist, wie hat mein Projekt funktioniert? @MarkC. – user3293338

Antwort

0

Nachdem ich verschiedene Methoden ausprobiert habe, habe ich die folgenden Arbeiten gefunden. Zuerst habe ich die Codes:

HttpConfiguration Config = new HttpConfiguration(); 
WebApiConfig.Register(Config); 
Config.EnableSwagger((c) => 
{ 
    c.SingleApiVersion("v1", "Flynn Forms"); 
    c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); 
}).EnableSwaggerUi(); 
app.UseWebApi(Config); 

in Startup.cs weil ich dachte, das den Eingang meiner Lösung. Dann bemerke ich in meinem WebApi-Teil, dass ich eine Datei namens WebApiConfig.cs habe, die auch die Instanz von HttpConfiguration konfiguriert. Also habe ich Codes in diese Datei verschoben. (Da es bereits eine Instanz von HttpConfiguration dort gewesen ist, müssen Sie es nicht schaffen, wieder.) Setzen Sie einfach die folgenden Codes gibt:

Config.EnableSwagger((c) => 
{ 
    c.SingleApiVersion("v1", "Flynn Forms"); 
    c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); 
}).EnableSwaggerUi(); 

Das Problem gelöst wurde.

Verwandte Themen