要分解错误消息:
尝试激活“WebApplication1.Controllers.BlogController”时无法解析类型“WebApplication1.Data.BloggerRepository”的服务。
这就是说您的应用程序正在尝试创建一个实例BlogController
但它不知道how创建一个实例BloggerRepository
传递到构造函数中。
现在看看你的启动情况:
services.AddScoped<IBloggerRepository, BloggerRepository>();
也就是说,每当IBloggerRepository
是必需的,创建一个BloggerRepository
并将其传递进去。
但是,您的控制器类要求具体的类BloggerRepository
当直接询问时,依赖注入容器不知道该怎么做。
我猜你只是犯了一个错字,但这是一个相当常见的错字。因此,简单的修复方法是更改控制器以接受 DI 容器所接收的内容does知道如何处理,在这种情况下,接口:
public BlogController(IBloggerRepository repository)
// ^
// Add this!
{
_repository = repository;
}
请注意,某些对象有自己的自定义注册方式,当您使用外部 Nuget 包时,这种情况更为常见,因此阅读它们的文档是值得的。例如,如果您收到一条消息:
无法解析类型“Microsoft.AspNetCore.Http.IHttpContextAccessor”的服务...
然后你可以使用自定义扩展方法 https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.httpservicecollectionextensions.addhttpcontextaccessor?view=aspnetcore-5.0该库提供的内容是:
services.AddHttpContextAccessor();
对于其他软件包 - 请务必阅读文档。