asp.net-mvc – 尝试创建类型为’TypeNewsController’的控制器时出错
发布时间:2020-12-05 03:20:49  所属栏目:asp.Net  来源:互联网 
            导读:我已经搜索了很长时间,但没有发现任何帮助.我哪里错了?我真的不知道该怎么办我写下了所有的细节.我试过,没有成功. An error occurred when trying to create a controller of type ‘TypeNewsController’. Make sure that the controller has a parameterle
                
                
                
            | 
                         我已经搜索了很长时间,但没有发现任何帮助.我哪里错了?我真的不知道该怎么办我写下了所有的细节.我试过,没有成功. 
 public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            Bootstrapper.Run();
        }
    } 
 我的apicontroller: public class TypeNewsController : ApiController
    {
        private readonly ITypeNewsService _typeNewsService;
        public TypeNewsController(ITypeNewsService typeNewsService)
        {
            _typeNewsService = typeNewsService;
        }
        [HttpGet]
        public TypeNewsResponse Get([ModelBinder] PageRequest model)
        {
            model = model ?? new PageRequest();
            var output = _typeNewsService.GetTypeNewss().ToList();
            return new TypeNewsResponse
            {
                Page = model.PageIndex,Records = model.PageSize,Rows = output.ToList(),Total = output.Count() / model.PageSize,};
        }
    } 
 错误: <Error> <Message>An error has occurred.</Message> <ExceptionMessage> An error occurred when trying to create a controller of type 'TypeNewsController'. Make sure that the controller has a parameterless public constructor. </ExceptionMessage> <ExceptionType>System.InvalidOperationException</ExceptionType> <StackTrace> at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request,HttpControllerDescriptor controllerDescriptor,Type controllerType) at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request,CancellationToken cancellationToken) at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext() </StackTrace> <InnerException> <Message>An error has occurred.</Message> <ExceptionMessage> Type 'JuventusNewsSiteApk.Controllers.TypeNewsController' does not have a default constructor </ExceptionMessage> <ExceptionType>System.ArgumentException</ExceptionType> <StackTrace> at System.Linq.Expressions.Expression.New(Type type) at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request,Type controllerType,Func`1& activator) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request,Type controllerType) </StackTrace> </InnerException> </Error> Bootstrapper类: public static class Bootstrapper
    {
        public static void Run()
        {
            SetAutofacContainer();
            //Configure AutoMapper
            AutoMapperConfiguration.Configure();
        }
        private static void SetAutofacContainer()
        {
            var builder = new ContainerBuilder();
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerRequest();
            builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerRequest();
            builder.RegisterAssemblyTypes(typeof(NewsRepository).Assembly)
                .Where(t => t.Name.EndsWith("Repository"))
                .AsImplementedInterfaces().InstancePerRequest();
            builder.RegisterAssemblyTypes(typeof(NewsService).Assembly)
                .Where(t => t.Name.EndsWith("Service"))
                .AsImplementedInterfaces().InstancePerRequest();
            builder.RegisterAssemblyTypes(typeof(DefaultFormsAuthentication).Assembly)
                .Where(t => t.Name.EndsWith("Authentication"))
                .AsImplementedInterfaces().InstancePerRequest();
            builder.Register(
                c => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new JuventusNewsApkEntities())))
                .As<UserManager<ApplicationUser>>().InstancePerRequest();
            builder.RegisterFilterProvider();
            IContainer container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    } 
 更新: public class TypeNewsService : ITypeNewsService
    {
        private readonly ITypeNewsRepository _typeNewsRepository;
        private readonly IUnitOfWork _unitOfWork;
        public TypeNewsService(ITypeNewsRepository typeNewsRepository,IUnitOfWork unitOfWork)
        {
            _typeNewsRepository = typeNewsRepository;
            _unitOfWork = unitOfWork;
        }
        #region ITypeNewsService Member
        public void AddTypeNews(TypeNews typeNews)
        {
            _typeNewsRepository.Add(typeNews);
            SaveTypeNews();
        }
        public void DeleteTypeNews(int id)
        {
            _typeNewsRepository.DeleteById(id);
            SaveTypeNews();
        }
        public IEnumerable<TypeNews> GetTypeNewss()
        {
            var output = _typeNewsRepository.GetAll();
            return output;
        }
        public void SaveTypeNews()
        {
            _unitOfWork.Commit();
        }
        #endregion
    }
    public interface ITypeNewsService
    {
        void AddTypeNews(TypeNews typeNews);
        void DeleteTypeNews(int id);
        IEnumerable<TypeNews> GetTypeNewss();
        void SaveTypeNews();
    }
解决方法您的控制器是WebApi控制器,Autofac的注册与MVC注册不同. WebApi不使用DependencyResolver,因此您需要告诉WebApi专门使用Autofac解析器.您需要将其添加到您的SetAutofacContainer代码中: // Create the depenedency resolver. var resolver = new AutofacWebApiDependencyResolver(container); // Configure Web API with the dependency resolver. GlobalConfiguration.Configuration.DependencyResolver = resolver; 有关更多信息,请参阅https://code.google.com/p/autofac/wiki/WebApiIntegration. (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
相关内容
- .net中如何获取机器硬件信息(防软件复制版)
 - .NET 中配置从xml转向json方法示例详解
 - asp.net – 如何使用resxresourcewriter写入所有三个值?
 - asp.net-mvc-3 – MVC3,多文件上传,模型绑定
 - ASP.NET Web应用程序的安装
 - asp.net-mvc-3 – Azure网站上的RavenDb – 访问被拒绝
 - asp.net-mvc-3 – MVC 3 $.ajax – 响应似乎是从部分视图缓
 - asp.net – 使用umbraco的iis应用程序池使用过多的内存
 - Asp.net下使用Jquery Ajax传送和接收DataTable的代码
 - asp.net-mvc – MVC 5具有身份验证模式的外部身份验证=表单
 
推荐文章
            站长推荐
            - asp.net-mvc – 具有ASP.NET MVC的多语言网站
 - asp.net-mvc – MVC 5具有身份验证模式的外部身份
 - asp.net-mvc – 允许一个人一次使用帐户的可重用
 - asp.net – Web Api参数始终为null
 - asp.net-mvc – 在ajax请求中返回PDF
 - asp.net-mvc – 我可以获取html.HiddenFor / Htm
 - ASP.NET -- WebForm -- HttpResponse 类的方法和
 - asp.net – 绑定ListView InsertItemTemplate中的
 - asp.net – VB.NET – 如何使用Active Directory
 - .net – 加密ApplicationServices ConnectionStr
 
热点阅读
            