我有一个基于 ASP.NET 2 的 MVC 解决方案,带有一个通用控制器和一个自定义绑定器。
控制器代码如下:
public class GenericController<T> : Controller where T : BaseModel
{
public readonly AppContext Db = new AppContext();
...
public virtual ActionResult Edit([ModelBinder(typeof(MyCustomBinder))] T obj)
因此,基本上,当我调用 Edit 操作时,会调用 MyCustomBinder 类。
MyCustomBinderClass (继承自DefaultModelBinder)需要覆盖:
protected override PropertyDescriptorCollection GetModelProperties(ControllerContext controllerContext, ModelBindingContext bindingContext)
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
并且这两种方法都引用了“调用”控制器。
所以我可以通过以下方式访问控制器的 DbContext:
dynamic controller = controllerContext.Controller;
dynamic db = controller.Db;
--
现在,我正在切换到 ASP.NET 核心。为了创建一个自定义活页夹,我需要实现IModelBinder,所以我需要实现:
public Task BindModelAsync(ModelBindingContext bindingContext)
问题是,如何访问调用控制器的 DbContext?
我需要它才能对数据库数据执行操作。
第一个想法是在我的应用程序中只有一个上下文,这显然是错误的(并导致运行时错误)。
但是我仍然需要在调用控制器和自定义绑定器中都有相同的上下文;否则这也会导致错误,因为实体在 2 个不同的上下文中被修改。
关于如何解决这个问题的任何想法?
谢谢!