为了账号安全,请及时绑定邮箱和手机立即绑定

Autofac 和 ASP .Net Web API 版本

Autofac 和 ASP .Net Web API 版本

C#
阿波罗的战车 2023-07-09 10:27:12
请注意,我使用的是 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但我认为这不适用于我的情况。
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

错误消息中有趣的部分是

Autofac.Core.Activators.Reflection.DefaultConstructorFinder使用on 类型找到的任何构造函数都EddiTools.Data.CalcRepository不能使用可用的服务和参数来调用:

无法解析EddiTools.Data.ICalcContext context构造函数的参数Void .ctor(EddiTools.Data.ICalcContext)

这意味着 Autofac 尝试创建一个CalcRepository,但没有ICalcContext可用的。

如果你查看你的注册,你只注册了类型,而没有表明它是一个ICalcContext

    bldr.RegisterType<CalcContext>()
        .InstancePerRequest();

如果你将其更改为

    bldr.RegisterType<CalcContext>()
        .As<ICalcContext>()
        .InstancePerRequest();

您的CalcContext类型将被注册为 a,ICalcContext这将让 Autofac 创建您的CalcRepository


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 212 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号