我创建了一个.NET Core应用程序,并使用依赖注入和存储库模式将存储库注入到我的控制器。但是,我收到了一个错误:
InvalidOperationException:当试图激活'WebApplication1.Controllers.BlogController‘时,无法解析“WebApplication1.Data.BloggerRepository”类型的服务。
仓库:
public interface IBloggerRepository { ... }
public class BloggerRepository : IBloggerRepository { ... }控制器:
public class BlogController : Controller
{
private readonly IBloggerRepository _repository;
public BlogController(BloggerRepository repository)
{
_repository = repository;
}
public IActionResult Index() { ... }
}Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddScoped<IBloggerRepository, BloggerRepository>();
}我不知道我做错了什么。有什么想法吗?
发布于 2016-12-01 00:11:53
若要分解错误消息,请执行以下操作:
当试图激活'WebApplication1.Controllers.BlogController‘时,无法解析“WebApplication1.Data.BloggerRepository”类型的服务。
这就是说,您的应用程序正在尝试创建BlogController实例,但它不知道如何创建BloggerRepository实例以传递给构造函数。
现在看看你的创业公司:
services.AddScoped<IBloggerRepository, BloggerRepository>();也就是说,每当需要IBloggerRepository时,创建一个BloggerRepository并将其传入。
但是,控制器类请求的是具体的类BloggerRepository,而依赖注入容器在直接请求时不知道该做什么。
我猜你只是做了一个错误,但相当常见。因此,简单的解决办法是更改控制器以接受DI容器确实知道如何处理接口的内容:
public BlogController(IBloggerRepository repository)
// ^
// Add this!
{
_repository = repository;
}请注意,有些对象有自己的自定义注册方式,这在使用外部Nuget包时更为常见,因此为它们阅读文档是值得的。例如,如果您收到一条消息说:
无法解析'Microsoft.AspNetCore.Http.IHttpContextAccessor‘类型的服务.
然后,您将使用该库提供的自定义扩展方法修复该问题,该库如下:
services.AddHttpContextAccessor();对于其他软件包,请始终阅读文档。
发布于 2018-08-27 21:48:48
我遇到这个问题是因为在依赖项注入设置中,我缺少了一个存储库的依赖项,它是控制器的依赖项:
services.AddScoped<IDependencyOne, DependencyOne>(); <-- I was missing this line!
services.AddScoped<IDependencyTwoThatIsDependentOnDependencyOne, DependencyTwoThatIsDependentOnDependencyOne>();发布于 2017-06-27 16:16:29
在我的例子中,我试图对一个需要构造函数参数的对象进行依赖注入。在本例中,在启动期间,我只提供了配置文件中的参数,例如:
var config = Configuration.GetSection("subservice").Get<SubServiceConfig>();
services.AddScoped<ISubService>(provider => new SubService(config.value1, config.value2));https://stackoverflow.com/questions/40900414
复制相似问题