Как настроить StructureMap для asp.net MVC 5

Я становлюсь ниже ошибки. Я настраиваю его аналогично asp.net mvc 4.

Нет конструктора без параметров, определенного для этого объекта. Описание: необработанное исключение произошло во время выполнения текущей сети запрос. Просмотрите трассировку стека для получения дополнительной информации о и где он возник в коде.

Сведения об исключении: System.MissingMethodException: для этого объекта не определен конструктор без параметров.

Наконец, найдено фактическое исключение "Ошибка активации произошла при попытке получить экземпляр типа HomeController, ключ" ""

Ошибка возникает, когда я собираюсь ввести класс обслуживания в home contoller

Ответ 1

Спасибо за весь ответ, наконец, нашли проблему. В моем классе обслуживания я ссылаюсь на параметр приложения, но не определяю его в файле web.config, потому что эта структура не может вставить экземпляр моего класса обслуживания.

private readonly string _path =
            ConfigurationManager.AppSettings["vp"].ToString(CultureInfo.InvariantCulture);

Ответ 2

Для меня работали следующие шаги:

  • Создайте новое приложение ASP.NET MVC 5 в RTM версии Visual Studio 2013
  • Установите StructureMap.MVC4 NuGet:

    Install-Package StructureMap.MVC4
    
  • Создайте новый интерфейс:

    public interface IDependency
    {
        string SayHello();
    }
    
  • Внедрить этот интерфейс:

    public class ConcreteDepenedency: IDependency
    {
        public string SayHello()
        {
            return "Hello World";
        }
    }
    
  • Работайте с HomeController с этим интерфейсом:

    public class HomeController : Controller
    {
        private readonly IDependency dependency;
        public HomeController(IDependency dependency)
        {
            this.dependency = dependency;
        }
    
        public ActionResult Index()
        {
            return Content(this.dependency.SayHello());
        }
    }
    
  • Настройте свой контейнер в ~/DependencyResolution/Ioc.cs:

    using StructureMap;
    using WebApplication1.Controllers;
    
    namespace WebApplication1.DependencyResolution {
    
        public static class IoC {
    
            public static IContainer Initialize() {
    
                ObjectFactory.Initialize(x =>
                {
                    x.For<IDependency>().Use<ConcreteDepenedency>();
                });
    
                return ObjectFactory.Container;
            }
        }
    }
    
  • Запустите приложение с помощью Ctrl+F5

  • ConcreteDependency успешно вводится в HomeController.

Ответ 3

У меня есть подробный обзор, показывающий, как получить эту работу, используя последний пакет StructureMap для MVC 5 здесь: http://ardalis.com/resolving-dependencies-in-asp.net-mvc-5-with-structuremap

Это не все, что отличается от того, что было необходимо в ASP.NET MVC 3, которое я ранее публиковал: http://ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC-3

В основном вы просто устанавливаете правильный пакет NuGet, модифицируете свои контроллеры для принятия зависимостей и подключаете свои интерфейсы к вашим реализациям в IoC.cs. Если вы следуете за стандартным соглашением StructureMap, вы можете автоматически подключить этот провод для многих типов.

Ответ 4

StructureMap (2.6.4.1) совместим с ASP.NET MVC 5 и вам не нужно ничего менять после обновления.

Процесс обновления, однако, не так прост, как вы думаете.

Вот список всех шагов, если вам нужно следовать.

PS: Я последовали за Риком Андерсоном после обновления (и он говорит, что вы должны это делать раньше), но все равно работало.

Надеюсь, что это поможет.