2016-05-10 2 views
0

Ich bin ein einfaches Api Schaffungnicht verwenden können Repository - Microsoft.Extensions.DependencyInjection.Abstractions.dll Fehler

"frameworks": { 
    "dnx451": { }, 
    "dnxcore50": { } 
} 

ich ein sehr einfaches Repository/Schnittstelle aufgebaut haben werden. Wenn ich es laufen bekomme ich die folgenden Fehler in VS2015 Ausgabe:

Ausnahme geworfen: 'System.InvalidOperationException' in Microsoft.Extensions.DependencyInjection.Abstractions.dll Exception geworfen: 'System.InvalidOperationException' in mscorlib. dll Ausnahme geworfen: 'System.InvalidOperationException' in mscorlib.dll Ausnahme geworfen: 'System.InvalidOperationException' in mscorlib.dll Ausnahme geworfen: 'System.InvalidOperationException' in mscorlib.dll Ausnahme geworfen: 'System.InvalidOperationException' in mscorlib.dll Ausnahme ausgelöst: 'System.InvalidOperationException' in mscorlib.dll Ausnahme geworfen: 'System.InvalidOperationException' in mscorlib.dll Ausnahme geworfen: 'System.InvalidOperationException' in mscorlib.dll Ausnahme geworfen: 'System.InvalidOperationException' in Microsoft.AspNet.Hosting.dll Exception geworfen: ‚System. InvalidOperationException‘in mscorlib.dll

Der Ausnahmefehler ist:

InvalidOperationException: Kann Dienst für Typ lösen 'AwsApi.Models.Repository' beim Versuchzu aktivieren'AwsApi.Controllers.DataController'.

bekomme ich diese Informationen in der Ereignisanzeige:

Die Beschreibung der Ereigniskennung 1001 von der Quelle HttpPlatformHandler kann nicht gefunden werden. Entweder die Komponente, die dieses Ereignis auslöst, ist nicht auf Ihrem lokalen Computer installiert oder die Installation ist beschädigt. Sie können die Komponente auf dem lokalen Computer installieren oder reparieren.

Ich nahm HttpPlatformHandler aus Abhängigkeiten und Startup, um zu sehen, ob es einen Unterschied gemacht hat und es nicht getan hat.

Hier ist meine project.json Datei:

{ 
    "version": "1.0.0-*", 
    "compilationOptions": { 
    "emitEntryPoint": true 
    }, 

    "dependencies": { 
    "AutoMapper": "4.2.1", 
    "EntityFramework.Commands": "7.0.0-rc1-final", 
    "EntityFramework.Core": "7.0.0-rc1-final", 
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final", 
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final", 
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", 
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final" 

    }, 

    "commands": { 
    "web": "Microsoft.AspNet.Server.Kestrel", 
    "ef": "EntityFramework.Commands" 
    }, 

    "frameworks": { 
    "dnx451": { }, 
    "dnxcore50": { } 
    }, 

    "exclude": [ 
    "wwwroot", 
    "node_modules" 
    ], 
    "publishExclude": [ 
    "**.user", 
    "**.vspscc" 
    ] 
} 

Hier ist mein Repository Code:

using System.Collections.Generic; 
using System.Linq; 

namespace AwsApi.Models 
{ 
    public class Repository : IRepository 
    { 
     private MyContext _context; 

     public Repository(MyContext context) 
     { 
      _context = context; 
     } 

     public IEnumerable<tblQuotes> GetAllQuotes() 
     { 
      return _context.tblQuotes.Take(10).ToList(); 
     } 
    } 
} 

Hier ist die Schnittstelle:

using System.Collections.Generic; 

namespace AwsApi.Models 
{ 
    public interface IRepository 
    { 
     IEnumerable<tblQuotes> GetAllQuotes(); 
    } 
} 

Hier ist der Controller:

namespace AwsApi.Controllers 
{ 
    [Route("api/[controller]")] 
    public class DataController : Controller 
    { 
     private IRepository _repository; 

     public DataController(Repository repository) 
     { 
      _repository = repository; 
     } 

     [HttpGet] 
     public JsonResult Get() 
     { 
      return Json(_repository.GetAllQuotes()); 
     } 
    } 
} 

Mein Startup.cs hat:

services.AddScoped<IRepository, Repository>(); 

Wenn ich den Controller ändern direkt den Kontext aufrufen und das Repository wie so unter Umgehung:

using Microsoft.AspNet.Mvc; 
using AwsApi.Models; 
using System.Linq; 

namespace AwsApi.Controllers 
{ 
    [Route("api/[controller]")] 
    public class DataController : Controller 
    { 
     private MyContext _context; 

     public DataController(MyContext context) 
     { 
      _context = context; 
     } 

     [HttpGet] 
     public JsonResult Get() 
     { 
      return Json(_context.tblBinQuotes.Take(10).ToList()); 
     } 
    } 
} 

Es funktioniert und gibt JSON-Daten!

Wenn es einen Fehler gibt, berührt es nicht einmal das Repository oder den Controller. Ich kann keinen Punkt finden, an dem es scheitert.

Ich verbinde mich mit einem vorhandenen SQL Db. Ich habe es mit und ohne Mapper probiert.

Habe ich etwas verpasst? Jede Hilfe wäre willkommen.

Antwort

1

Sie haben IRepository in Startup.cs registriert, aber Repository in Controller angefordert. Ändern des Controller-Konstruktor-Parametertyps in IRepository:

public DataController(IRepository repository) {...} 
+0

Was für ein Idiot! Ich danke dir sehr. – ComfortablyNumb

Verwandte Themen