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

如何修复结构映射 DI 错误 = 控制器构建中发生的值不能为空

如何修复结构映射 DI 错误 = 控制器构建中发生的值不能为空

C#
胡子哥哥 2021-11-07 20:28:49
场景是; VS2017、MVC 5、StructureMap.MVC5我收到以下错误:构建类型 BLL.MMCodes.MMCodesService 时出错。" InnerException {"值不能为空。\r\n参数名称:字符串"}尝试运行我的应用程序时出现在“DoGetInstance”函数中。protected override object DoGetInstance(Type serviceType, string key) {        IContainer container = (CurrentNestedContainer ?? Container);        if (string.IsNullOrEmpty(key)) {            return serviceType.IsAbstract || serviceType.IsInterface                ? container.TryGetInstance(serviceType)                : container.GetInstance(serviceType);        }        return container.GetInstance(serviceType, key);    }服务和接口namespace BLL.MMCodes{    public interface IMMCodesService    {        bool ValidateAgainstBizRules(string MMCode, out string errorMessage);        bool _UseEF        {            get;            set;        }    }public class MMCodesService : IMMCodesService{    private string errorMessage;    public MMCodesService()    {        ValidateAgainstBizRules( MMCode, out errorMessage);    }    #region vars    public string MMCode { get; set; }    private bool IsValid { get; set; }    private List<string> Validations = new List<string>();    #endregion    public  bool _UseEF { get; set; }    public bool ValidateAgainstBizRules(string mmCode, out string errorMessage)    {....}控制器using System.Collections.Generic;using System.Web.Mvc;using BLL.MMCodes;using BusinessLayerDemoProject.Models;namespace BusinessLayerDemoProject.Controllers{    public class MMCodeController : Controller    {        private IMMCodesService _iService;        public MMCodeController(IMMCodesService service)        {            this._iService = service;            this._iService._UseEF = true;        }我已经尝试了来自整个论坛的几个建议,例如。更改中的属性StructureMapDependencyScope以适应 HTTPContext 和 CurrentNestedContainer 属性中的 null,但没有成功。
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

问题是这个代码:


public MMCodesService()

{

    ValidateAgainstBizRules( MMCode, out errorMessage);

}

构造函数中的代码抛出异常。因此StructureMap无法将其传递给依赖于它的那些对象。


因此,您可以修复代码以使其不引发异常。


但是……


我几乎可以肯定代码应该被删除/注释掉。代码在构造函数中被调用。因此,根据定义,MMCode尚未设置 - 因此对其进行任何类型的验证都是毫无意义的。因此,我建议将代码更改为:


public MMCodesService()

{

}


查看完整回答
反对 回复 2021-11-07
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信