我简直无法弄清楚这一点。将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。
答案 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();
将具体类型注册为所有已实现的接口。