在ServiceStack上的插件上访问IRequestContext

roc*_*cco 8 c# servicestack

我正在尝试创建一个基于ServiceStack IPlugin接口的插件,该接口可以测量操作所用的时间并将其发布到仪表板.代码本身非常简单,我尝试根据Request Logger上的一些概念来实现.

此记录器使用在默认ServiceRunner类中添加的StopWatch,但它仅在配置请求记录器时执行.

我已经有一个自定义的ServiceRunner并且StopWatch正在那里初始化,但是使用这种方法并不是最佳的,因为插件不是自包含的.

我现在最大的问题是我显然无法访问IRequestContext.插件是否有任何方式可以访问此上下文或任何其他方式来测量在简单插件中运行请求的时间,而不依赖于ServiceRunner?

谢谢!

kin*_*hen 1

将请求的开始时间存储在 RequestFilter 中,然后在 ResponseFilter 中使用当前时间减去开始时间来计算时间?

这也可以在插件中完成。

这是一些伪代码...

appHost.RequestFilters.Add( ( req, res, obj ) =>
    {
        if(!req.Items.ContainsKey( "begin-time" ) )
            req.Items.Add( "begin-time", DateTime.Now );
        else
            req.Items[ "begin-time" ] = DateTime.Now;
    }
);

appHost.ResponseFilters.Add( ( req, res, i ) =>
    {
        var beginTime = (DateTime)req.Items[ "begin-time" ];

        var elapsed = DateTime.Now - beginTime;
    }
);
Run Code Online (Sandbox Code Playgroud)