我创建了一个自定义操作过滤器来执行审计跟踪的日志记录。我将我的日志记录代码添加到public override void OnActionExecuting(ActionExecutingContext filterContext)
.
我的问题是,如何将我的 EF dbContext 传递给这个方法?我想编写一个单独的操作过滤器并将其重新用于其他开发项目,而无需更改每个项目的 dbcontext。
如果这不是推荐的做法,我该怎么办?
我创建了一个自定义操作过滤器来执行审计跟踪的日志记录。我将我的日志记录代码添加到public override void OnActionExecuting(ActionExecutingContext filterContext)
.
我的问题是,如何将我的 EF dbContext 传递给这个方法?我想编写一个单独的操作过滤器并将其重新用于其他开发项目,而无需更改每个项目的 dbcontext。
如果这不是推荐的做法,我该怎么办?
如果我正在做这样的事情,我想我会在服务层中实现一个通用的审计日志记录方法,它已经知道数据上下文并将审计模型传递给它。这样,如果需要记录应用程序的不同部分(甚至可能与控制器无关),您不必重新实现任何东西。
或者,如果您只想坚持使用控制器,您也许可以为数据上下文创建一个接口
public interface IDataContext<T> where T : DbContext
{
T DataContext { get; }
}
创建一个 BaseController 来实现System.Web.Mvc.Controller
public class BaseController : Controller, IDataContext<YourDbContextClass>
{
public YourDbContextClass DataContext { get { return new YourDbContextClass(); } }
}
您可以在控制器上使用此基类并通过 访问上下文DataContext
,但对于日志记录,您可以使用覆盖的方法创建一个新类
public class AuditController : BaseController
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
// whatever you do inside here
// DataContext.LaDiDa
}
}
然后继承你的东西
public class HomeController : AuditController
{
public ActionResult Index()
{
return View();
}
}
尽管这不是最直接的解决方案,但您可能会完全失去界面并在BaseController
.