当前位置: 首页 > 知识库问答 >
问题:

依赖项注入错误:当类已注册时,尝试激活时无法解析类型的服务

太叔景曜
2023-03-14

我创建了一个.NETCoreMVC应用程序,并使用依赖注入和存储库模式将存储库注入我的控制器。然而,我得到一个错误:

无法解析类型WebApplication1.Data.BloggerRepository的服务,而试图激活WebApplication1.Controllers.BlogController。

存储 库:

public interface IBloggerRepository { ... }

public class BloggerRepository : IBloggerRepository { ... }

控制器:

public class BlogController : Controller
{
    private readonly IBloggerRepository _repository;

    public BlogController(BloggerRepository repository)
    {
        _repository = repository;
    }

    public IActionResult Index() { ... }
}

启动. cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    
    services.AddScoped<IBloggerRepository, BloggerRepository>();
}

我不知道我做错了什么。有什么想法吗?

共有3个答案

海新霁
2023-03-14

在我的例子中,我试图对一个需要构造函数参数的对象进行依赖注入。在这种情况下,在启动期间,我只提供了配置文件中的参数,例如:

var config = Configuration.GetSection("subservice").Get<SubServiceConfig>();
services.AddScoped<ISubService>(provider => new SubService(config.value1, config.value2));
闻人吕恭
2023-03-14

我遇到了这个问题,因为在依赖注入设置中,我缺少存储库的依赖项,该依赖项是控制器的依赖项:

services.AddScoped<IDependencyOne, DependencyOne>();    <-- I was missing this line!
services.AddScoped<IDependencyTwoThatIsDependentOnDependencyOne, DependencyTwoThatIsDependentOnDependencyOne>();
太叔景曜
2023-03-14

要分解错误消息:

试图激活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();

对于其他软件包,请务必阅读文档。

 类似资料:
  • 我创建了一个。NET核心MVC应用程序,并使用依赖项注入和存储库模式将存储库注入控制器。但是,我得到一个错误: 无法解析类型WebApplication ation1的服务。数据。BloggerRepository'同时尝试激活'WebApplication 1.控制器。BlogController'. 型号(Blog.cs) DbContext(BloggingContext.cs) 存储库(I

  • 我正在尝试创建ASP。NET核心应用程序使用通用存储库模式,使用实体框架和服务层。然而,每当我启动项目时,都会遇到以下错误: 无法解析“GameSource”类型的服务。数据存储库。GameRepository“正在尝试激活”GameSource。服务。游戏服务'。 游戏控制器。反恐精英: 游戏服务。反恐精英: 游戏存储库。反恐精英: BaseRepository。反恐精英: GameSource

  • 我正在创建viewcomponents,下面是我的全部代码。。但当我调用这个viewcomponent时,我得到如下错误。。所以,任何人都可以帮助我解决这个问题,并向我解释到底是什么问题。 错误是: InvalidOperationException:无法解析“Perfulmestore”类型的服务。数据模型。ShoppingCart正在尝试激活香水商店。视图组件。ShoppingCartSumm

  • 在我的ASP. NET Core应用程序中,我收到以下错误: 无效操作异常:在尝试激活“城市”时无法解析类型“城市”的服务。模型。IRepository。控制器。HomeController。 我是家庭控制器,我试图将城市的getter传递给视图,如下所示: 我有一个文件存储库。cs包含一个接口及其实现,如下所示: 我的启动类包含从模板生成的默认代码。我做了任何更改:

  • 我使用泛型使代码可重用,并利用依赖项注入。 我有两个接口:DataParserImplementation和ObjectImplementation。我有实现每个的类:SalesRepbyId实现DataParserImpl(它将数据解析为对象并将这些对象放入集合)。SalesRep实现Objectimpl(它是特定数据集的对象)。 我试图得到它,这样我就可以选择在我的SalesRepbyId类中

  • 我对Android的Gradle构建有问题。我尝试了很多方法来解决这个问题,但没有什么不起作用。我需要帮助。 Gradle版本:4.4 Gradle插件:3.0.1 错误:无法解析app@serverDebug /compileClasspath的依赖关系:无法解析项目:vksdk_library。 错误:无法解析“”的依存关系:app@mockDebugAndroidTest/compileCl