using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using Umbraco.Core;
using Umbraco.Core.ObjectResolution;
namespace Umbraco.Web.Mvc
{
///
/// A resolver used to resolve the default RenderMvcController that is used to render any front-end
/// Umbraco page when using MVC when there are no routes hijacked.
///
public class DefaultRenderMvcControllerResolver : SingleObjectResolverBase
{
///
/// Constructor accepting the default RenderMvcController
///
///
public DefaultRenderMvcControllerResolver(Type value)
: base(value)
{
ValidateType(value);
}
///
/// Returns the Default RenderMvcController type
///
///
public Type GetDefaultControllerType()
{
return Value;
}
///
/// Returns an instance of the default controller instance.
///
[Obsolete("This method will be removed in future versions and should not be used to resolve a controller instance, the IControllerFactory is used for that purpose")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IRenderMvcController GetControllerInstance()
{
//try the dependency resolver, then the activator
var instance = DependencyResolver.Current.GetService(Value) ?? Activator.CreateInstance(Value);
var result = instance as IRenderMvcController;
if (result == null)
{
throw new InvalidOperationException("Could not create an instance of " + Value + " for the default " + typeof(IRenderMvcController).Name);
}
return result;
}
///
/// Sets the default RenderMvcController type
///
///
public void SetDefaultControllerType(Type controllerType)
{
ValidateType(controllerType);
Value = controllerType;
}
///
/// Ensures that the type passed in is of type RenderMvcController
///
///
private void ValidateType(Type type)
{
if (TypeHelper.IsTypeAssignableFrom(type) == false)
{
throw new InvalidOperationException("The Type specified (" + type + ") is not of type " + typeof (IRenderController));
}
}
}
}