我正在使用
创建一个简单的Api"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
我构建了一个非常简单的存储库/接口。当我运行它时,我在VS2015输出中得到以下错误:
抛出异常:'System.InvalidOperationException' Microsoft.Extensions.DependencyInjection.Abstractions.dll异常 抛出:mscorlib.dll异常中的'System.InvalidOperationException' 抛出:mscorlib.dll异常中的'System.InvalidOperationException' 抛出:mscorlib.dll异常中的'System.InvalidOperationException' 抛出:mscorlib.dll异常中的'System.InvalidOperationException' 抛出:mscorlib.dll异常中的'System.InvalidOperationException' 抛出:mscorlib.dll异常中的'System.InvalidOperationException' 抛出:mscorlib.dll异常中的'System.InvalidOperationException' 抛出:mscorlib.dll异常中的'System.InvalidOperationException' 抛出:'System.InvalidOperationException'中 抛出Microsoft.AspNet.Hosting.dll异常: mscorlib.dll中的“System.InvalidOperationException”
异常错误是:
InvalidOperationException:无法解析类型的服务 尝试激活时'AwsApi.Models.Repository' 'AwsApi.Controllers.DataController'。
我在事件查看器中获取此信息:
来自源HttpPlatformHandler的事件ID 1001的描述 无法找到。引发此事件的组件不是 安装在本地计算机上或安装已损坏。您 可以在本地计算机上安装或修复组件。
我从依赖项和Startup中取出了HttpPlatformHandler,看看它是否有所作为,但它没有。
这是我的project.json文件:
{
"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"
]
}
这是我的存储库代码:
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();
}
}
}
这是界面:
using System.Collections.Generic;
namespace AwsApi.Models
{
public interface IRepository
{
IEnumerable<tblQuotes> GetAllQuotes();
}
}
这是控制器:
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());
}
}
}
我的Startup.cs有:
services.AddScoped<IRepository, Repository>();
如果我更改控制器直接调用上下文并绕过存储库,如下所示:
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());
}
}
}
它可以工作并返回JSON数据!
当它出错时,它甚至不会触及存储库或控制器。我无法找到它失败的地方。
我正在连接到现有的SQL Db。我已经尝试过,有没有Mapper。
我错过了什么吗?任何帮助将不胜感激。
答案 0 :(得分:1)
您在IRepository
注册了Startup.cs
,但在控制器中请求Repository
。将控制器构造函数参数类型更改为IRepository
:
public DataController(IRepository repository) {...}