注入具有构造函数依赖项的记录器

Lar*_*rén 6 c# dependency-injection asp.net-core

我正在尝试重构一些代码,以通过startup.cs中的映射服务使用.NET Core依赖注入.我想在这里注入一个IRequestDatabaseLogger而不是新建它.但是它需要构造函数中的上下文.我怎样才能做到这一点?甚至没有DI框架甚至可能吗?

    public class ActionFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var requestDatabaseLogger = new RequestDatabaseLogger(context);
            long logId = requestDatabaseLogger.Log();

            context.HttpContext.AddCurrentLogId(logId);

            base.OnActionExecuting(context);
        }
   }
Run Code Online (Sandbox Code Playgroud)

Ste*_*ven 8

但是它需要构造函数中的上下文.

让应用程序组件的结构依赖于运行时间数据是一个反模式,如所描述这里.那篇文章描述了如何解决这些问题.

在您的情况下,这可能意味着您的组件应该依赖于ASP.NET Core的IHttpContextAccessor抽象,这是参考文章中描述的模式.

或者,如本文所述,您可以使用它的Log方法将所需的运行时数据传递给记录器.