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);
有什么方法可以为我在简单注入器中注册的 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);