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

时间:2017-10-25 02:42:20

标签: dependency-injection autofac

我简直无法弄清楚这一点。将Autofac与.Net core 2.0一起使用并尝试解决一些简单的依赖关系。感觉我已经尝试了所有内容,所以我当前的代码并没有反映我尝试过的所有内容。

以下是我从Autofac获得的例外之一

  

没有找到'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'类型的构造函数   可以使用可用的服务和参数调用'Elucidate.Core.Application.ValuesController':无法解析参数'Elucidate.Core.Data.Repository.IRepository'1 [Elucidate.Core.Model.User.IUser] rep'of constructor' Void .ctor(Elucidate.Core.Data.Repository.IRepository`

这是我试图获得依赖注入的地方

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。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

public ValuesController(Repository<IUser> rep)

第一种可能是首选方法。你也可以这样做:

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

将具体类型注册为所有已实现的接口。