I have an issue in Castle Windsor. Please help me! I'm using Castle Windsor 3.2.0.0, .Net 4.0 and Mvc 3.0.0.0
Thank you so much!
Issue: No component for supporting the service Mvc IControllerFactory was found There is some code here.
public class WindsorDependencyResolver : IDependencyResolver
{
private readonly IWindsorContainer _container;
public WindsorDependencyResolver(IWindsorContainer container)
{
this._container = container;
}
public object GetService(Type serviceType)
{
return _container.Resolve(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _container.ResolveAll(serviceType).Cast<object>();
//return _container.ResolveAll<object>(serviceType);
}
}
//Castle Windsor register
protected void Application_Start()
{
var container = new WindsorContainer();
container.AddFacility<TypedFactoryFacility>()
.Register(Component.For<IServiceFactory>().AsFactory().LifeStyle.Transient);
//Do register the service/type to container
container.Register(
Types.FromThisAssembly()
.BasedOn(typeof(Controller))
.WithService.Self().LifestyleTransient());
container.Register(
Component.For<IRepository>()
.ImplementedBy<GenericRepository>().DependsOn(Dependency.OnValue("context", "ProjectContext"))
.LifeStyle.PerWebRequest);
container.Register(
Types.FromAssembly(Assembly.GetAssembly(typeof(IUserService)))
.BasedOn(typeof(ServiceBase))
.WithService.DefaultInterfaces().LifestylePerWebRequest());
DependencyResolver.SetResolver(new WindsorDependencyResolver(container));
}
Stay away from DependencyResolver... use ControllerFactory instead.
Have a look to the tutorial
Agreed with Cristiano - here's how I did it, but it was a mix of both:
EDIT #1: This is a safer more straightforward approach that's doing what Cristiano's tutorial link is calling for. In my case, I have Windsor wrapped behind our own their called ContainerHost/ServiceLocator.