1
namespace System
.Web
.Mvc
{
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()
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
{
33 public HashSet
<string> DefaultNamespaces
{
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(
59 CultureInfo
.CurrentCulture
,
60 MvcResources
.ControllerBuilder_MissingIControllerFactory
,
61 controllerFactoryType
),
62 "controllerFactoryType");
65 _factoryThunk
= delegate() {
67 return (IControllerFactory
)Activator
.CreateInstance(controllerFactoryType
);
69 catch (Exception ex
) {
70 throw new InvalidOperationException(
72 CultureInfo
.CurrentCulture
,
73 MvcResources
.ControllerBuilder_ErrorCreatingControllerFactory
,
74 controllerFactoryType
),