使用MVC并尝试对控制器使用依赖注入,但是当我尝试在具有依赖性的控制器上调用方法时,我得到“无参数构造函数”错误。这是我的设置:
ProductRepository : IProductRepository
ProductService : IProductService {
public ProductService(IProductRepository repository) {} }
ProductController {
public ProductController(IProductService service) {} }
在Global.asax中:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
InitializeServiceLocator();
RegisterRoutes(RouteTable.Routes);
}
protected virtual void InitializeServiceLocator()
{
IWindsorContainer container = new WindsorContainer();
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));
container.RegisterControllers(typeof(HomeController).Assembly);
ComponentRegistrar.AddComponentsTo(container);
foreach (var handler in container.Kernel.GetAssignableHandlers(typeof(object)))
{
System.Diagnostics.Debug.WriteLine(String.Format("{0} {1}",
handler.ComponentModel.Service,
handler.ComponentModel.Implementation));
}
ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
}
ComponentRegistrar:
public static void AddComponentsTo(IWindsorContainer container)
{
AddCustomRepositoriesTo(container);
AddApplicationServicesTo(container);
}
当InitializeServiceLocator完成时,我可以看到所有控制器,服务和存储库都已注册。
非常感谢任何帮助。
答案 0 :(得分:0)
我仍然想知道这个问题,但我已经通过创建自己的WindsorControllerFactory来解决这个问题(修改以避免任何web.config操作):http://mvcsharp.wordpress.com/2010/01/09/setting-up-ioc-in-asp-net-mvc-using-castle-windsor/
上一代码中的WindsorControllerFactory是MvcContrib.Castle.WindsorControllerFactory。是否有人成功使用MvcContrib版本?
感谢。