.NET Framework升级.NET Core:如何从ControllerContext获取Controller
.NET Core中获取当前控制器实例的替代方案
在.NET Core中,ControllerContext确实不再提供.Controller属性,想要获取当前控制器对象可以用以下两种方法:
通过HttpContext直接获取实例
ASP.NET Core会将当前控制器实例存入HttpContext.Items集合,键为typeof(ControllerBase),代码示例:var baseController = HttpContext.Items[typeof(ControllerBase)] as Controllers.BaseController;在初始化时手动传入控制器实例
如果你的BaseModel由控制器创建,直接在实例化BaseModel时把当前控制器对象传进去,这种方式更可控,也更符合依赖注入的设计思想:// 控制器中的代码 var model = new BaseModel(this); // BaseModel类的定义 public class BaseModel { private readonly Controllers.BaseController _controller; public BaseModel(Controllers.BaseController controller) { _controller = controller; } }
需要注意的是,第一种方法依赖框架内部的存储逻辑,虽然当前版本稳定,但后续框架更新可能存在变更风险;第二种方法属于显式传递,耦合度更低,是更推荐的实现方式。
内容的提问来源于stack exchange,提问作者Bad Dub
相关产品推荐
相关产品推荐

