Dependency injection 在Autofac中找不到任何构造函数
这是我的错误: Autofac.Core.DependencyResolutionException:在“ConnectCx.Web.PluginUI.MVC5.Services.DefaultService”类型上,找不到具有“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数,这些构造函数都不能使用可用的服务和参数调用: 无法解析构造函数Void.ctor(ConnectCx.Web.PluginUI.MVC5.Repository.IRepository1[ConnectCx.Web.PluginUI.MVC5.Models.ViewModels.DependencyTestViewModel]DependencyRepository]的参数'ConnectCx.Web.PluginUI.MVC5.Repository.IRepository'(ConnectCx.Web.PluginUI.MVC5.Models.ViewModels.DependencyTestViewModel]) 这是我的全球计划Dependency injection 在Autofac中找不到任何构造函数,dependency-injection,asp.net-mvc-5,autofac,Dependency Injection,Asp.net Mvc 5,Autofac,这是我的错误: Autofac.Core.DependencyResolutionException:在“ConnectCx.Web.PluginUI.MVC5.Services.DefaultService”类型上,找不到具有“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数,这些构造函数都不能使用可用的服务和参数调用: 无法解析构造函数Void.ctor(ConnectCx.Web.PluginUI.MVC5.
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
var builder = new ContainerBuilder();
// Register our MVC controllers.
builder.RegisterControllers(typeof(MvcApplication).Assembly);
//Register our Services
//builder.RegisterType(typeof(DefaultService)).AsImplementedInterfaces();
//builder.RegisterType<IRepository>();
//builder.RegisterType(typeof(IRepository)).AsImplementedInterfaces();
builder.RegisterType<DefaultService>().As<IDefaultService>().SingleInstance().PreserveExistingDefaults();
// OPTIONAL: Register model binders that require DI.
builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
builder.RegisterModelBinderProvider();
// OPTIONAL: Register web abstractions like HttpContextBase.
builder.RegisterModule<AutofacWebTypesModule>();
// OPTIONAL: Enable property injection in view pages.
builder.RegisterSource(new ViewRegistrationSource());
// OPTIONAL: Enable property injection into action filters.
builder.RegisterFilterProvider();
// Set the dependency resolver to be Autofac.
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
这是我的假设的一个问题吗?如果不是,这里的问题是什么?此错误消息告诉您Autofac无法生成
DefaultService
实例,因为唯一可用的构造函数需要IRepository
,并且没有注册
要修复此错误,您必须注册一个IRepository
例如:
builder.RegisterType<DependancyTestViewModelRepository>()
.As<IRepository<DependancyTestViewModel>>();
builder.RegisterType()
.As();
或者如果您有一个通用存储库
namespace ConnectCx.Web.PluginUI.MVC5.Repository
{
public interface IRepository<T> where T : class
{
T Get(object id);
void Attach(T entity);
IQueryable<T> GetAll();
void Insert(T entity);
void Delete(T entity);
void Update(T entity);
void SubmitChanges(); //need?
T Find(Expression<Func<T, bool>> predicate);
IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate);
T GetById(int id);
}
}
builder.RegisterGeneric(typeof(GenericRepository<>))
.As(typeof(IRepository<>));
builder.RegisterGeneric(typeof(GenericRepository))
.As(类型(假定));
啊,是的,设置只是为了测试和确保,忘记添加生成器,谢谢你的系统。参数例外:类型“ConnectCx.Web.PluginUI.MVC5.Models.ViewModels.DependencyTestViewModel”不能分配给服务,我想我的存储库有问题class@lemunk. 我的代码样本有一个错误。你能分享你的存储库和注册吗?现在没关系,改成使用ninject,问题出在我的存储库上,已经解决了。谢谢你的回答。
builder.RegisterType<DependancyTestViewModelRepository>()
.As<IRepository<DependancyTestViewModel>>();
builder.RegisterGeneric(typeof(GenericRepository<>))
.As(typeof(IRepository<>));