gpt4 book ai didi

dependency-injection - Autofac DI,类型不可分配给服务

转载 作者:行者123 更新时间:2023-12-04 00:14:52 26 4
gpt4 key购买 nike

我根本想不通。将 Autofac 与 .Net core 2.0 一起使用并尝试解决一些简单的依赖关系。感觉我已经尝试了一切,所以我当前的代码并没有反射(reflect)我已经尝试过的一切。

这是我从 Autofac 获得的异常之一

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Elucidate.Core.Application.ValuesController' can be invoked with the available services and parameters: Cannot resolve parameter 'Elucidate.Core.Data.Repository.IRepository'1[Elucidate.Core.Model.User.IUser]rep' of constructor 'Void .ctor(Elucidate.Core.Data.Repository.IRepository`

这是我尝试注入(inject)依赖项的地方

public ValuesController(IRepository<IUser> rep)

下面是我如何在 autofac 模块中注册类型

builder.RegisterType<User>().As<IUser>();
builder.RegisterType<CoreUserStore<User>>();

builder.RegisterType(typeof(Repository<User>)).As<Repository<IUser>>();
builder.RegisterType<EntityFrameworkModelContext<User>>(); //.As<IModelContext>();

我做错了什么?我是 autofac 的新手,习惯了似乎已经灭绝的 Unity。

最佳答案

ValuesController构造函数期待 IRepository<IUser>并且您没有在 Autofac 中连接正确的类型。

您需要将具体的存储库类型注册为已实现的接口(interface),注意 .As<IRepository... :

builder.RegisterType(typeof(Repository<User>)).As<IRepository<IUser>>();

或者在构造函数中“询问”具体类型。

public ValuesController(Repository<IUser> rep)

第一种可能是首选方法。您还可以:

builder.RegisterType<Repository<User>>().AsImplementedInterfaces();

这会将具体类型注册为所有已实现的接口(interface)。

关于dependency-injection - Autofac DI,类型不可分配给服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46923091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com