场景是; 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()
{
}
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消