Doc/DependencyInjection/Castle

To use Castle Windsor as your dependency resolver in OpenRasta, do the following:

  • Add a reference to the OpenRasta.DI.Windsor assembly
  • Add a reference to the Castle Windsor assemblies (Castle.Core, Castle.DynamicProxy, Castle.Windsor, Castle.MicroKernel)
  • Implement IDependencyResolverAccessor. One handy place to do this is in your main Configuration class.
  • In your IDependencyResolverAccessor, return a new WindsorDependencyResolver(IWindsorContainer). Use your existing container initialisation strategy, a simple example of which follows:

In a standard ASP.NET application, you might choose to implement the IDependencyResolverAccessor in global.asax, which would look like this:

    public class Global : HttpApplication, IDependencyResolverAccessor
    {
        IWindsorContainer container;
        public IWindsorContainer WindsorContainer
        {
            get
            {
                if(container == null)
                    container = ConfigureContainer();
                return container;
            }           
        }

        IWindsorContainer ConfigureContainer()
        {
            container = new WindsorContainer();

            container.Register(
                Component.For<IUserRepository>()
                    .ImplementedBy<UserRepository>());

            return container;
        }

        public IDependencyResolver Resolver
        {
            get
            {
                return new WindsorDependencyResolver(WindsorContainer);
            }
        } 
    }