私はあなたがこれを行う必要があるとは思えませんが、私は自分のIControllerFactory
を作成するのが最も簡単だと思います。 MVC3には、新しいインターフェイスIControllerActivator
もあります。ここで
public interface IControllerActivator
{
/// <summary>
/// When implemented in a class, creates a controller.
/// </summary>
IController Create(RequestContext requestContext, Type controllerType);
}
は、それが私だったら、私はを通じてコードを実行したい、スタートアップ/ブートストラッププロセスの
public class UnityControllerFactory : DefaultControllerFactory
{
/// <summary>
///
/// </summary>
private readonly IUnityContainer _container;
/// <summary>
/// Initializes a new instance of the <see cref="UnityControllerFactory"/> class.
/// </summary>
/// <param name="container">The container.</param>
/// <param name="controllerActivator">The controller activator.</param>
public UnityControllerFactory(IUnityContainer container, IControllerActivator controllerActivator)
: base(controllerActivator)
{
////Guard.ArgumentNotNull(container, "container");
_container = new PerRequestUnityContainer(container);
}
/// <summary>
/// Releases the specified controller.
/// </summary>
/// <param name="controller">The controller to release.</param>
public override void ReleaseController(IController controller)
{
if (controller != null)
{
_container.Teardown(controller);
}
base.ReleaseController(controller);
}
}
public class UnityControllerActivator : IControllerActivator
{
private readonly IUnityContainer _container;
public UnityControllerActivator(IUnityContainer container)
{
////Guard.ArgumentNotNull(container, "container");
_container = new PerRequestUnityContainer(container);
}
/// <summary>
/// When implemented in a class, creates a controller.
/// </summary>
/// <returns>
/// The created controller.
/// </returns>
/// <param name="requestContext">The request context.</param><param name="controllerType">The controller type.</param>
public IController Create(RequestContext requestContext, Type controllerType)
{
////Guard.ArgumentNotNull(requestContext, "requestContext");
////Guard.ArgumentNotNull(controllerType, "controllerType");
// do what ever you need to before creating your controller
IController controller = (IController)_container.Resolve(controllerType);
return controller;
}
}
とどこか、
IUnityContainer container = ...;
// resolve our factory (and any of it's dependencies)
IControllerFactory factory = container.Resolve<IControllerFactory>();
ControllerBuilder.Current.SetControllerFactory(factory);
実行するときに 'BeginRequest'で呼びたくない場合は? 'ApplicationStart'? –
'BeginRequest'の後、理想的です。私は 'BeginRequest'の中でそれを実行することができましたが、可能であれば静的リソース要求に対しては実行したくありません。 –
コントローラリクエストでのみ実行しますか? –