Легче получить отслеживание стека на Firefox, чем это находится на IE, но существенно вот то, что Вы хотите сделать:
Обертка "проблематичная" часть кода в блоке попытки/выгоды:
try {
// some code that doesn't work
var t = null;
var n = t.not_a_value;
}
catch(e) {
}
при исследовании содержания "ошибочного" объекта, он содержит следующие поля:
e.fileName: исходный файл / страница, куда проблема прибыла из e.lineNumber: номер строки в файле/страница, где проблема возникла e.message: простое сообщение, описывающее, какая ошибка произошла e.name: тип ошибки, которая произошла, в примере выше его должен быть 'TypeError' e.stack: Содержит отслеживание стека, которое вызвало исключение
, я надеюсь, что это выручает Вас.
Если вы хотите иметь конструкторы без параметров, вы должны определить фабрику настраиваемых контроллеров. У Фила Хаака есть отличная запись в блоге на эту тему.
Если вы не хотите разворачивать собственную фабрику контроллеров, вы можете получить их заранее в ASP.NET MVC Contrib на codeplex / github.
Вам не обязательно иметь пустой конструктор, если вы настраиваете настраиваемый ControllerFactory для использования инфраструктуры внедрения зависимостей, например Ninject , ] AutoFac , Castle Windsor и т. Д. У большинства из них есть код CustomControllerFactory для использования их контейнера, который можно использовать повторно.
Проблема в том, что фабрика контроллеров по умолчанию не знает как передать зависимость. Если вы не хотите использовать упомянутый выше фреймворк, вы можете сделать то, что называется внедрением зависимостей для бедняков:
public class HomeController : Controller
{
private IDependency iDependency;
public HomeController() : this(new Dependency())
{
}
public HomeController(IDependency iDependency)
{
this.iDependency = iDependency;
}
}
Взгляните на MVCContrib http://mvccontrib.github.com/MvcContrib/ . У них есть фабрики контроллеров для ряда контейнеров DI. Виндзор, Структурная карта и т. Д.
Вы можете внедрить свою зависимость по свойству, например, см .: Внедрение по свойству Использование Ninject выглядит следующим образом:
[Inject]
public IDependency YourDependency { get; set; }