如何在.net core 2.2中使用EventListener(运行时事件)

时间:2018-12-06 00:36:04

标签: .net-core .net-core-2.2

MS宣布发布.NET Core 2.2。它使用Runtime Events包括对运行时的诊断改进,我的问题是:如何在.NET Core 2.2中使用EventListener?这篇文章很差。

1 个答案:

答案 0 :(得分:0)

我实际上在一个示例ASP.Net Core 2.2 API项目中运行了它。这实际上很容易,但我也需要一些时间。

我已经创建了一个诊断类,如文档中提到的那样。我将该类命名为Diagnostics.cs。该类包含Microsoft文档中的代码。仅此而已。 然后我将其作为单例服务添加到ConfigureServices()中。

services.AddSingleton<Diagnostics>();

最后,我将其注入到ValuesController中。

private Diagnostics _diag;
        public ValuesController(Diagnostics diag)
        {
            _diag = diag;
        }

从邮递员到达终点时,我遇到了很多事件。

ThreadID = 13588 ID = 192 Name = MethodJitInliningFailed
        Name = "MethodBeingCompiledNamespace" Value = "Microsoft.IntelliTrace.TelemetryObserver.MvcActionEventArgumentSerializer"
        Name = "MethodBeingCompiledName" Value = "SerializeArguments"
        Name = "MethodBeingCompiledNameSignature" Value = "class System.String  (class System.Collections.Generic.IEnumerable`1<value class System.Collections.Generic.KeyValuePair`2<class System.String,class System.Object>>)"
        Name = "InlinerNamespace" Value = "Microsoft.IntelliTrace.TelemetryObserver.MvcActionEventArgumentSerializer"
        Name = "InlinerName" Value = "SerializeArguments"
        Name = "InlinerNameSignature" Value = "class System.String  (class System.Collections.Generic.IEnumerable`1<value class System.Collections.Generic.KeyValuePair`2<class System.String,class System.Object>>)"
        Name = "InlineeNamespace" Value = "System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]"
        Name = "InlineeName" Value = "get_Current"
        Name = "InlineeNameSignature" Value = "instance !0  ()"
        Name = "FailAlways" Value = "False"
        Name = "FailReason" Value = "target not direct"
        Name = "ClrInstanceID" Value = "8"

这当然仅是出于测试目的。我可能不会将其添加为单例,而是尝试使其通用/类型化,并将其添加为作用域或临时服务。