MvcController 的自定义 IHttpControllerActivator

Custom IHttpControllerActivator for MvcControllers

有什么方法可以为我在简单注入器中注册的 Mvc 控制器注册自定义 IHttpControllerActivator,方式类似于

一旦我 运行 DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));,简单的注入器也会连接到我的第三方控制器,我想避免这种情况。

根据史蒂文在评论中的建议,我得出以下结论:

public class MvcControllerFactory : DefaultControllerFactory
{
    private readonly Container _container;
    private readonly IControllerFactory _original;

    public MvcControllerFactory(
        Container container, IControllerFactory original)
    {
        _container = container;
        _original = original;
    }

    protected override IController GetControllerInstance(
        RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
        {
            return null;
        }

        if (controllerType == typeof(MyMvcController))
        {
            return (IController)_container.GetInstance(controllerType);
        }

        var controllerName = requestContext.RouteData.GetRequiredString("controller");
        if (!string.IsNullOrEmpty(controllerName))
        {
            return _original.CreateController(requestContext, controllerName);
        }

        return (IController) Activator.CreateInstance(controllerType);
    }
}

在我的应用启动中:

var original = ControllerBuilder.Current.GetControllerFactory();
var controllerFactory = new MvcControllerFactory(container, original);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);