Ich bin ein ASP.net WebApi erstellen und versuchen, Entity neben verwenden. Ich folge diesem Leitfaden.Interner Server Fehler 500 Asp.net WebApi versucht, DI mit Entität
Getting Started with ASP.NET Web API 2 (C#)
Ich erhalte einen 500 Internal Server Error Fiddler verwenden. Die JSON Ausnahmemeldung besagt ExceptionMessage=An error occurred when trying to create a controller of type 'LocationsController'. Make sure that the controller has a parameterless public constructor.
Hier ist die Controller.cs
[RoutePrefix("api/Locations")]
public class LocationsController : ApiController
{
// GET api/<controller>
private IlocationsRepository LocationsRepo;
public LocationsController(IlocationsRepository _repo)
{
if (_repo == null) { throw new ArgumentNullException("_repo"); }
LocationsRepo = _repo;
}
[HttpGet]
[Route("")]
public IEnumerable<Location> GetAll()
{
return LocationsRepo.GetAll();
}
}
Ich kann nicht einen parameter öffentlichen Konstruktor verwenden, weil ich das Datenbank-Repository verwenden müssen, die für Locations
erstellt wurde. Ich verifizierte das Problem mit der IlocationsRepository
, indem Sie Folgendes tun.
Wenn ich den LocationsController
Konstruktor mit keinen Parametern ersetzen und eine List<Location>
innerhalb der Steuerung deklarieren, und Dummy-Daten verwenden. Ich erhalte eine 200
mit allen JSON Daten korrekt. Hier
ist der Start der Datei Global.asax.cs
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
protected void Session_Start(object sender, EventArgs e)
{
}
}
Es scheint, als ob ich brauche die Dependency Injection im Global zu tun, aber keiner der Führer hatte keine Informationen in Bezug auf diesen Teil.
Denn hier Nachwelt die ContextDB cs, hier
public class WebServerContext : DbContext
{
public WebServerContext() : base("WebServerContext") {}
public DbSet<Order> dOrders { get; set; }
public DbSet<Location> dLocations { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
Weitere Nachwelt ist die Standorte Repository.
public class LocationsRepository : IlocationsRepository
{
private z_Data.WebServerContext db = new z_Data.WebServerContext();
public void Add(Location item)
{
db.dLocations.Add(item);
}
public IEnumerable<Location> GetAll()
{
return db.dLocations;
}
}
Wo ist Ihr DI-Code? – Legends
Dies scheint zu sein, was mir fehlt, und ich verwende nicht Unity. –
Sofern Sie keinen ASP.NET vNext-Alias Core verwenden, benötigen Sie einen DI-Provider wie Unity oder etwas anderes ... – Legends