我正在向我的MS MVC應用程序中引入DI,並且無法從我的自定義控制器工廠中實例化控制器。看來重寫的「GetControllerInstance」沒有被調用。MVC - 創建城堡溫莎控制器工廠 - 沒有爲此對象定義的無參數構造函數
有人能告訴我我失蹤了什麼嗎?
我的控制器廠:
public class WindsorControllerFactory : DefaultControllerFactory
{
public WindsorControllerFactory()
{
var controllerTypes = from t in AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())
where typeof (IController).IsAssignableFrom(t)
select t;
foreach (Type controllerType in controllerTypes)
{
ApplicationContainer.Container.AddComponentLifeStyle(controllerType.FullName, controllerType,
LifestyleType.Transient);
}
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if(controllerType !=null)
{
return (IController) ApplicationContainer.Container.Resolve(controllerType);
}
return base.GetControllerInstance(requestContext, controllerType);
}
}
}
的Application_Start:
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory());
}
控制器工廠被實例化,但它似乎它不是用來解決控制器。我在'GetControllerInstance'上放置了一個斷點,但它從未被擊中。
結果是沒有爲此對象定義的無參數構造函數。拋出異常
更新:
我改變了GetControllerInstance這樣:
private WindsorContainer _container;
public WindsorControllerFactory(WindsorContainer container)
{
_container = container;
_container.Register(AllTypes.Of<IController>().FromAssembly(
typeof(BaseFactoryController).Assembly).Configure(
c => c.Named(c.Implementation.Name.ToLowerInvariant()).LifeStyle.Transient));
}
現在,我不得不忽視空controllerType?!如果這沒有評論:
//base.GetControllerInstance (requestContext,controllerType);
它開始把我的.js文件當作控制器。會拋出httpException
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
return null;
}
//base.GetControllerInstance(requestContext, controllerType);
return (IController) _container.Resolve(controllerType);
}
關於把js當成控制器,同樣的問題,相同的建議http://stackoverflow.com/questions/1598421/why-is-castle-windsor-trying-to-resolve-my-content-and-scripts-folder -as-a-co – 2010-12-03 00:31:34