MVC3 integrated, with some changes to make it compile on Mono and with Razor2
[mono-project.git] / mcs / class / System.Web.Mvc3 / Mvc / ControllerBuilder.cs
blob1df29c3926d757cd9e48b2aa0e102ab1c12e2df6
1 namespace System.Web.Mvc {
2 using System;
3 using System.Collections.Generic;
4 using System.Diagnostics.CodeAnalysis;
5 using System.Globalization;
6 using System.Web.Mvc.Resources;
8 public class ControllerBuilder {
10 private Func<IControllerFactory> _factoryThunk = () => null;
11 private static ControllerBuilder _instance = new ControllerBuilder();
12 private HashSet<string> _namespaces = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
13 private IResolver<IControllerFactory> _serviceResolver;
15 public ControllerBuilder()
16 : this(null) {
19 internal ControllerBuilder(IResolver<IControllerFactory> serviceResolver) {
20 _serviceResolver = serviceResolver ?? new SingleServiceResolver<IControllerFactory>(
21 () => _factoryThunk(),
22 new DefaultControllerFactory { ControllerBuilder = this },
23 "ControllerBuilder.GetControllerFactory"
27 public static ControllerBuilder Current {
28 get {
29 return _instance;
33 public HashSet<string> DefaultNamespaces {
34 get {
35 return _namespaces;
39 [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Justification = "Calling method multiple times might return different objects.")]
40 public IControllerFactory GetControllerFactory() {
41 return _serviceResolver.Current;
44 public void SetControllerFactory(IControllerFactory controllerFactory) {
45 if (controllerFactory == null) {
46 throw new ArgumentNullException("controllerFactory");
49 _factoryThunk = () => controllerFactory;
52 public void SetControllerFactory(Type controllerFactoryType) {
53 if (controllerFactoryType == null) {
54 throw new ArgumentNullException("controllerFactoryType");
56 if (!typeof(IControllerFactory).IsAssignableFrom(controllerFactoryType)) {
57 throw new ArgumentException(
58 String.Format(
59 CultureInfo.CurrentCulture,
60 MvcResources.ControllerBuilder_MissingIControllerFactory,
61 controllerFactoryType),
62 "controllerFactoryType");
65 _factoryThunk = delegate() {
66 try {
67 return (IControllerFactory)Activator.CreateInstance(controllerFactoryType);
69 catch (Exception ex) {
70 throw new InvalidOperationException(
71 String.Format(
72 CultureInfo.CurrentCulture,
73 MvcResources.ControllerBuilder_ErrorCreatingControllerFactory,
74 controllerFactoryType),
75 ex);