c# - 处理横切问题,例如 Web 应用程序组件的内部统计报告

标签 c# design-patterns inversion-of-control performancecounter

我正在尝试为 OLTP Web 应用程序的内部组件实现统计报告。例如,我想近乎实时地跟踪以下内容的使用情况或性能:成功/失败登录的数量、nhibernate session 的数量、服务 HTTP 请求的时间、不同类型的交易数量(订单、访问等)。所有这些统计数据都通过 UDP 发送到 statsd 服务器 (https://github.com/etsy/statsd) 并使用 Graphite 绘制为图表。

该应用程序使用依赖注入(inject)来连接内部组件。我想将统计报告集中到 statsd 服务器自己的类中,并将其隐藏在界面下。然而,我觉得在应用程序的每个组件中注入(inject)统计报告类/接口(interface)的实例,报告性能或使用数据是一种味道。在我看来,性能报告事件应该是一个跨领域的关注点,非常像日志记录。

您如何处理此类请求的内部设计?您会使用构造函数注入(inject)、静态方法(例如 PerformanceCounters.Increment("name.of.counter"))来调用我的受监控组件吗?

如果对上下文有任何帮助,该应用程序是用 C# 完成的,并使用 ASP.NET 和 CaSTLe Windsor 作为 IoC。

谢谢, 罗伯特

最佳答案

我使用 Spring.Net 来做类似的事情。据我所知,Spring 与 IoC 的 CaSTLe Windsor 非常相似,Spring 使用 CaSTLeWindsor 创建动态代理。这些可以用于 Spring 支持的 AOP。学习曲线很短,框架有很好的文档记录。配置完性能方面后,将其应用到您的方法中应该非常容易。如果您想要少量 sample ,请告诉我。

关于c# - 处理横切问题,例如 Web 应用程序组件的内部统计报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392738/

相关文章:

c# - 修改路线以减少困惑

c# - asp.net 加载栏

微服务架构中的 Elasticsearch

c++ - 基于抽象迭代器加速设计的想法

dependency-injection - 我应该在简单注入(inject)器中使用单例注册吗?

c# - 如何动态创建一个类

c# - 如何独立使用 Xamarin Profiler 来分析应用程序

c# - 字符串操作模式(C# 或其他语言)

java - Spring依赖注入(inject)解决什么问题?

c# - 当还有专门的服务类型时,使用 CaSTLe Windsor 的流畅接口(interface)在装饰器链中注册组件?