Ошибка использования единицы при отображении объектов в MVC

1

Я вижу проблему использования единства в конструкторе контроллера. Вот подробности -

В конфигурации устройства (unity.config) - вот что я делаю -

container.RegisterType<ISessionWrapper, SessionWrapper>()

В конструкторе Controller

    public OnboardingController( ISessionWrapper sessionwrapper )
    {
        SessionWrapper = sessionwrapper;
    }

SessionWrapper

public interface ISessionWrapper {string Brand {get; set; задавать; }//string CurrenSessionCulture { get; }//строка CurrenSessionCulture {get; set; задавать; } } }}

public class SessionWrapper : ISessionWrapper
{
    public string Brand
    {
        get;
        set;
    }
}

Ошибка при выполнении этого

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

Ошибка источника. Необработанное исключение было создано во время выполнения текущего веб-запроса. Информация о происхождении и местоположении исключения может быть идентифицирована с использованием трассы стека исключений ниже. ****

Когда я изменяю определение конструктора контроллера, как это, все работает нормально.

    public OnboardingController()
        : this(new SessionWrapper())
    {
        //
    }
  • 0
    Вы вызываете DependencyResolver.SetResolver () в своем конфигурационном коде?
  • 0
    Как вы конструируете (создаете) свой OnboardingController?
Показать ещё 1 комментарий
Теги:
asp.net-mvc
c#-4.0
unity-container
asp.net-mvc-4

1 ответ

0
Лучший ответ

Чтобы разрешить экземпляры ваших классов контроллеров, вам нужно использовать пользовательский ControllerFactory, используя Unity. По умолчанию контроллер ControllerFactory, используемый MVC, требует, чтобы классы контроллера имели конструктор без параметров.

Пользовательский ControllerFactory с использованием Unity выглядит так:

public class UnityControllerFactory : DefaultControllerFactory {
  private readonly IUnityContainer _container;

  public UnityControllerFactory (IUnityContainer container) {
    _container = container;
  }

  protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) {
    if (controllerType != null) {
        return _container.Resolve(controllerType) as IController;
    }
    else {
        return base.GetControllerInstance(requestContext, controllerType);
    }
  }
}

При запуске приложения (обычно в global.asax) вы регистрируете ControllerFactory в MVC Runtime, используя следующий код

var container = // initialize your unity container
var factory = new UnityControllerFactory(container);
ControllerBuilder.Current.SetControllerFactory(factory);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню