Ошибка StructureMap при использовании с MVC в конструкторе

Когда я устанавливаю 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();
        }
    }

После запуска с сообщением об ошибке сервера:

Для этого объекта не определен конструктор без параметров. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде. Сведения об исключении: 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;
        }
    }

Что мне нужно делать дальше?

1 ответ

Решение

Вы должны указать StructureMap, как подключить все типы, которые не соответствуют стандартному соглашению (которое вы используете при сканировании). Соглашение по умолчанию заключается в подключении всех интерфейсов к конкретным реализациям с тем же именем, что и интерфейс (без префикса "I").

В вашем случае вы должны указать StructureMap подключить все необходимые закрытые универсальные типы IMapper с помощью:

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

Поместите строку выше, где у вас есть x.For<IExample>().Use<Example(),

Другие вопросы по тегам