在构造函数中与MVC一起使用时出现StructureMap错误

本文关键字:StructureMap 错误 构造函数 MVC 一起 | 更新日期: 2023-09-27 18:20:58

当我为我的项目安装StructureMap并使用时:

public class IndexController : Controller
    {
        private readonly IMapper<UserModel, UserDto> _mapper;
        public IndexController(IMapper<UserModel, UserDto> mapper)
        {
            _mapper = mapper;
        }
        public ActionResult Index()
        {
            List<UserDto> userDb = UserDb.GetAll();
            UserModel userModel = _mapper.Map(userDb[0]);
            return View();
        }
    }

运行后出现服务器错误消息:

没有为此对象定义无参数构造函数。描述:在执行当前web期间发生未处理的异常要求有关的详细信息,请查看堆栈跟踪错误以及它在代码中的来源。异常详细信息:System.MissingMethodException:未为此对象定义无参数构造函数。…

但我对依赖反转的原理了解不多。请帮我解决这个问题。

这是ObjectFactory:

public static class IoC {
        public static IContainer Initialize() {
            ObjectFactory.Initialize(x =>
                        {
                            x.Scan(scan =>
                                    {
                                        scan.TheCallingAssembly();
                                        scan.WithDefaultConventions();
                                    });
            //                x.For<IExample>().Use<Example>();
                        });
            return ObjectFactory.Container;
        }
    }

我下一步需要做什么?

在构造函数中与MVC一起使用时出现StructureMap错误

您需要告诉StructureMap如何连接所有不遵循默认约定(在扫描中使用)的类型。默认约定是将所有接口连接到与接口同名(减去"I"前缀)的具体实现。

在您的情况下,您需要告诉StructureMap使用连接所有需要的IMapper的封闭泛型类型

x.For(typeof(IMapper<,>)).Use(typeof(MyConcreteMapper<,>);

将行放在您当前拥有x.For<IExample>().Use<Example()的位置上方。