У меня есть необходимость вручную создавать экземпляры некоторых контроллеров и, следовательно, иметь этот код:
var controller = Activator.CreateInstance(typeof(AccountController),
repository) as AccountController;
В AccountController у меня есть метод, подобный этому:
[AllowAnonymous]
[HttpPost]
public ApiJsonResult LogOn(LogOnAccountDto model)
{
ValidateModel(model);
if (ModelState.IsValid)
{
//...
}
}
Я хочу, чтобы мойModelState.IsValid работает, поэтому я вызываю ValidateModel и передаю ему модель.
Это не удается, по-видимому, потому что controlContext не установлен.Я получаю эту ошибку:
Значение не может быть нулевым.Имя параметра: controllerContext Описание: необработанное исключение произошло во время выполнения текущего веб-запроса.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым.Имя параметра: controllerContext
Итак, как мне вручную создать экземпляр IController в коде, чтобы «все» работало?
Заранее спасибо.
Так зачем мне это нужно? Я играю с некоторыми идеями архитектуры и игровой логики для "онлайн-стратегии".
У меня есть приложение ASP.NET MVC 4 (Preview), которое является моей веб-версией игры.Идея заключается в том, что в игру также следует играть на таких устройствах, как Windows Phone, iPhone и т. Д. Через приложения NATIVE.Поэтому мне нужен некоторый API для моей игры (какой-то REST-сервис, который общается через http / json).Поскольку этот API будет общедоступным интерфейсом для игры, вся логика игры, конечно же, будет находиться в стороне от этого API.
Поэтому я хочу использовать этот API как для «веб-версии», так и для «мобильной»версия "игры.Я реализовал этот API как область внутри ASP.NET MVC 4 (предварительная версия).Сначала я должен был сделать httpwebrequest от моей «веб-версии» до API, поэтому я использовал API ТОЧНО, как и «мобильная версия».Но потом я подумал, что было бы лучше на самом деле просто инстанцировать контроллеры вручную, чтобы избежать всех накладных расходов на json / web-вызовы, которые я получил бы от вызова API «правильным способом».
Так вот почему яЯ здесь, сейчас я хочу создать экземпляр моих контроллеров вручную в коде, потому что я хочу использовать в них точную логику.
Имеет смысл?Если у вас есть идея получше, пожалуйста, дайте мне знать - я делаю это для изучения этого, а не для производства реального продукта - по крайней мере, сейчас это не цель - сейчас я просто пытаюсь изучить некоторые новые вещи:)