Я использую Castle Windsor для управления экземплярами контроллера (среди прочего). Моя фабрика контроллеров выглядит так:
public class WindsorControllerFactory : DefaultControllerFactory
{
private WindsorContainer _container;
public WindsorControllerFactory()
{
_container = new WindsorContainer(new XmlInterpreter());
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof(Controller).IsAssignableFrom(t)
select t;
foreach (Type t in controllerTypes)
{
_container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient);
}
}
protected override IController GetControllerInstance(Type controllerType)
{
return (IController)_container.Resolve(controllerType); // ArgumentNullException is thrown here
}
Когда я запускаю свое приложение ASP.Net MVC и пытаюсь перейти к «/» (или другому пути), я получаю ArgumentNullException. Я поставил точку останова на вход GetControllerInstance и обнаружил, что он вызывается один раз с моим HomeController, затем второй раз с нулем (что происходит, когда генерируется исключение). Почему он снова вызывается?
Должен ли я изменить метод на что-то вроде этого:
protected override IController GetControllerInstance(Type controllerType)
{
if (controllerType == null)
return null;
return (IController)_container.Resolve(controllerType);
}