静态检测当前运行的 CmdLet

问题描述

我有一个基本的 Powershell CmdLet 类来构建 static IServiceProvider。从这个抽象 CmdLet 派生的类然后利用 IServiceProvider 进行 DI。因为 IServiceProviderstatic,它每个 Powershell 会话构建一次,而不是每次执行任何派生的 CmdLet 时构建。

各种服务包括带有 Microsoft.Extensions.Logging.ILogger 的构造函数。我希望这些服务发出的日志在 Powershell 会话中发出。例如,当调用 ILogger.LogTrace() 时,我希望将其传递给 CmdLet.WriteVerbose() 方法

我已经按照以下方式创建了一个 CmdletLogger 类:

public CmdletLogger(Cmdlet cmdlet,string categoryName): ILogger
{
  // ILogger interface implemented,using cmdlet.Write* methods.
}

我想通过 CmdletLogger 提供 IServiceProvider,但我不知道如何从 {{ 1}} 类:

CmdLet

我意识到我可以使 CmdletLoggerProvider 非静态,并在连接日志记录时将 public class CmdLetLoggerProvider : ILoggerProvider { public ILogger CreateLogger(string categoryName) { // detect the currently running CmdLet here,so I can construct a CmdletLogger } } 传递给 IServiceProvider 类,但是重新生成性能影响为单个 CmdLet 会话中执行的每个 CmdletLoggerProvider 构建 IServiceProvider 是......不值得。

我希望 Powershell 有类似于 IHttpContextAccessor 的东西,但我一直找不到这样的东西。

作为参考,抽象的 CmdLet 类如下所示:

Powershell

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)