Я вижу проблему использования единства в конструкторе контроллера. Вот подробности -
В конфигурации устройства (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())
{
//
}
Чтобы разрешить экземпляры ваших классов контроллеров, вам нужно использовать пользовательский 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);