Я создал собственную фабрику контроллеров, чтобы иметь возможность внедрять экземпляры сервисов в мои контроллеры с помощью StructureMap.
Все работает нормально, за исключением того, что при каждом запросе фабрика контроллера вызывается в первый раз, когда он правильно разрешает контроллер, и во второй раз, когда параметр controllerType имеет значение NULL, и поэтому метод GetInstance StructureMap выдает исключение ArgumentNullException: значение не может быть нулевым Имя параметра: ключ.
Приложение на самом деле не падает, но если я отлаживаю, оно всегда останавливается на этом, и мне приходится вручную продолжать выполнение, чтобы отобразилось представление.
Может ли кто-нибудь объяснить, почему это происходит и как я могу это решить.
Вот код из моего Global.asax и фабрики контроллеров:
Фабрика контроллеров:
public class IocControllerFactory : DefaultControllerFactory
{
private readonly IContainer container;
public IocControllerFactory(IContainer container)
{
if(container == null) throw new ArgumentNullException("container");
this.container = container;
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return this.container.GetInstance(controllerType) as IController;
}
}
Global.asax
private void RegisterControllerFactory()
{
var ioc = new Container();
var controllerFactory = new IocControllerFactory(ioc);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
ioc.Configure(r =>
r.Scan(x =>
{
x.AssemblyContainingType<UserAccountController>();
x.AddAllTypesOf<IController>();
x.Include(t => typeof(IController).IsAssignableFrom(t));
}
));
ioc.Configure(r => r
.For<IUserAccountService>()
.Use<UserAccountService>());
}
Большое спасибо за любую помощь.