- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 IControllerFactory
和 IControllerActivator
遇到了一些困惑。我试图手动创建 Controller ,因为我的项目需要它。于是,我查阅了微软的文档。然而,这两个接口(interface)的描述令人困惑。
每个接口(interface)的说明
<强> IControllerFactory :提供创建和处置 Controller 的方法。
<强> IControllerActivator :提供创建 Controller 的方法。
两者都说他们提供了创建 Controller 的方法。那么,如果我想手动创建 Controller ,我应该使用哪个接口(interface)?他们之间有什么区别吗?
最佳答案
为了创建 Controller 实例,ASP.NET Core 获取 IControllerFactory
实例并使用它来创建 Controller 。
但是,如果您查看 ASP.NET Core DefaultControllerFactory实现后,您将看到 IControllerFactory
和 IControllerActivator
实际上都用于 Controller 创建,因为 DefaultControllerFactory
使用 IControllerActivator
创建 Controller 的实例。
DefaultControllerFactory
需要在构造函数中传递类型为 IControllerActivator
的依赖项:
public DefaultControllerFactory(
IControllerActivator controllerActivator,
IEnumerable<IControllerPropertyActivator> propertyActivators)
{
if (controllerActivator == null)
{
throw new ArgumentNullException(nameof(controllerActivator));
}
if (propertyActivators == null)
{
throw new ArgumentNullException(nameof(propertyActivators));
}
_controllerActivator = controllerActivator;
_propertyActivators = propertyActivators.ToArray();
}
和CreateController
和ReleaseController
方法基本上只是调用IControllerActivator
的相应方法:
public object CreateController(ControllerContext context)
{
... some null checks
// _controllerActivator is of type IControllerActivator
var controller = _controllerActivator.Create(context);
foreach (var propertyActivator in _propertyActivators)
{
propertyActivator.Activate(context, controller);
}
return controller;
}
public void ReleaseController(ControllerContext context, object controller)
{
... some null checks
_controllerActivator.Release(context, controller);
}
IControllerFactory
的默认实例所做的唯一额外的事情是调用属性激活器(IControllerPropertyActivator
的实例)。
针对您的情况,您可以做什么?
IControllerFactory
实现并根据需要创建 Controller 实例。在这种情况下,除非您需要,否则不会使用 IControllerActivator
。IControllerFactory
的默认实现,但提供您自己的 IControllerActivator
实现,该实现将由 DefaultControllerFactory 使用
。关于c# - IControllerFactory 与 IControllerActivator asp.net core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56478849/
我对 IControllerFactory 和 IControllerActivator 遇到了一些困惑。我试图手动创建 Controller ,因为我的项目需要它。于是,我查阅了微软的文档。然而,这
当已经可以通过覆盖 DefaultControllerFactory 的 CreateController 方法自定义创建 Controller (并使用 DI 解析)时,IControllerAct
我是一名优秀的程序员,十分优秀!