Autofac 和 ASP .Net Web API 版本

请注意,我使用的是 Autofac,但是当我运行 API 并使用此 URL 与Postman进行检查时,:

http://localhost:1234/api/calculations/corpname&51&114&1045

但我有一个用于计算控制器的公共无参数构造函数:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using System.Web;

using System.Web.Http;

using AutoMapper;

using MyAppTools.Data;

using MyAppTools.Models;


namespace MyAppTools.Controllers

{

    public class CalculationsController : ApiController

    {

        private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();

        private readonly IMapper _mapper;

        private readonly ICalcRepository _repository;

        private readonly IMyModelUserRepository _myModelRepository;


        public CalculationsController()

        {

        }


        public CalculationsController(ICalcRepository repository, IMyModelUserRepository myModelRepository, IMapper mapper)

        {

            _repository = repository;

            _myModelRepository = myModelRepository;

            _mapper = mapper;

        }


        public async Task<IHttpActionResult> Get()

        {

            try

            {

                var result = await _repository.GetAllCalculationsAsync();

                if (result == null) return NotFound();


                // Mapping

                // This centralizes all of the config

                var mappedResult = _mapper.Map<IEnumerable<CalculationModel>>(result);


                return Ok(mappedResult);

            }

            catch (Exception ex)

            {

                Logger.Error(ex);


                // Be careful about returning exception here

                return InternalServerError();

            }

        }


到目前为止,我已经在这里检查解决方案:


Autofac 和 ASP .Net MVC 4 Web API https://www.nopcommerce.com/boards/t/38102/none-of-the-constructors-found-with-autofaccoreactivatorsreflectiondefaultconstructorfinder-on-type.aspx


但我认为这不适用于我的情况。


阿波罗的战车
浏览 213回答 1
1回答

慕容3067478

错误消息中有趣的部分是Autofac.Core.Activators.Reflection.DefaultConstructorFinder使用on 类型找到的任何构造函数都EddiTools.Data.CalcRepository不能使用可用的服务和参数来调用:无法解析EddiTools.Data.ICalcContext context构造函数的参数Void .ctor(EddiTools.Data.ICalcContext)。这意味着 Autofac 尝试创建一个CalcRepository,但没有ICalcContext可用的。如果你查看你的注册,你只注册了类型,而没有表明它是一个ICalcContext&nbsp;&nbsp;&nbsp;&nbsp;bldr.RegisterType<CalcContext>() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.InstancePerRequest();如果你将其更改为&nbsp;&nbsp;&nbsp;&nbsp;bldr.RegisterType<CalcContext>() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.As<ICalcContext>() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.InstancePerRequest();您的CalcContext类型将被注册为 a,ICalcContext这将让 Autofac 创建您的CalcRepository
打开App,查看更多内容
随时随地看视频慕课网APP