Dependency injection 在Autofac中找不到任何构造函数

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.

这是我的错误:

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])

这是我的全球计划

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<>));