1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
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
7 // http://www.apache.org/licenses/LICENSE-2.0
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
18 using Castle
.MicroKernel
;
19 using Castle
.MonoRail
.Framework
;
22 /// Custom implementation of <see cref="IControllerFactory"/>
23 /// that uses the WindsorContainer to obtain the
24 /// controller instances.
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
;
37 public IController
CreateController(string area
, string controller
)
39 Type implType
= controllerTree
.GetController(area
, controller
);
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
);