More passing tests.
[castle.git] / MonoRail / Castle.MonoRail.WindsorExtension / WindsorControllerFactory.cs
blob0cb24073a3a01313cc45c08e802e53cc04ec94ee
1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle.MonoRail.WindsorExtension
17 using System;
18 using Castle.MicroKernel;
19 using Castle.MonoRail.Framework;
21 /// <summary>
22 /// Custom implementation of <see cref="IControllerFactory"/>
23 /// that uses the WindsorContainer to obtain the
24 /// controller instances.
25 /// </summary>
26 public class WindsorControllerFactory : IControllerFactory
28 private readonly IControllerTree controllerTree;
29 private readonly IKernel kernel;
31 public WindsorControllerFactory(IControllerTree controllerTree, IKernel kernel)
33 this.controllerTree = controllerTree;
34 this.kernel = kernel;
37 public IController CreateController(string area, string controller)
39 Type implType = controllerTree.GetController(area, controller);
41 if (implType == null)
43 throw new ControllerNotFoundException("Controller not found on the Windsor container instance. " +
44 "Have you registered it? Name: '" + controller + "' area: '" + area + "'");
47 return CreateController(implType);
50 public IController CreateController(Type controllerType)
52 return (IController) kernel.Resolve(controllerType);
55 public void Release(IController controller)
57 kernel.ReleaseComponent(controller);