理想情况下,我想创建一个继承自 ActionFilterAttribute 的过滤器,我可以在 Global.asax 中应用它,这将为我的应用程序中的所有操作创建性能计数器。这个问题很简单,但问题是我希望性能计数器具有它们在名称中附加的操作的方法签名。但是,我找不到一种方法来提取属性在构造过程中附加到的方法的方法名称。这导致我必须将属性单独应用于每个操作并将其签名作为参数传递。但是,这会带来明显的问题(即方法签名的更新不会与性能计数器命名自动同步)。
为了简化问题,如果我将属性附加到任何类型的方法,我是否可以访问它所附加到的方法的名称/签名?我正在寻找一个通用的解决方案,它也适用于不是从 ActionFilterAttribute 派生的属性。
public class SomeAttribute : ActionFilterAttribute
{
public string FunctionSignature { get; set; }
public SomeAttribute()
{
this.FunctionName = { HOW DO I GET THE NAME OF THE METHOD I'M ON WITHOUT PASSING IT IN AS AN INPUT ARGUMENT? }
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Some code to update perf counter(s) with recorded time that will use string.Format("{0}: Avg. Time or Something", this.FunctionSignature).
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{ …Run Code Online (Sandbox Code Playgroud) 我有以下文件:
topnav.component.ts
import { Component } from '@angular/core';
import { EnvironmentService } from '../services/ipc/environment.service';
const { ipcRenderer } = electron;
@Component({
selector: 'app-topnav',
templateUrl: './topnav.component.html',
styleUrls: ['./topnav.component.scss']
})
export class TopnavComponent {
version: string = null;
constructor(private environmentService: EnvironmentService) {
this.environmentService.getVersionInfo();
ipcRenderer.on('environment-reply', (event, arg) => {
console.log(arg);
this.version = arg;
});
}
}
Run Code Online (Sandbox Code Playgroud)
topnav.component.html
...
<div *ngIf="version">{{version}}</div>
...
Run Code Online (Sandbox Code Playgroud)
在代码中,我正在检索有关我正在运行的环境的版本信息,并更新版本属性并希望它在我的视图中更新.调用getVersionInfo()是异步的,并在电子中使用ipcMain和ipcRenderer通信结构.我能够验证这些是否按预期工作.角度和电子都没有误差.
我已经验证了该版本确实在arg param中返回并按预期登录到控制台; 但是,在我浏览我的应用程序之前,它不会显示在视图中.这让我相信它与Angular 2中的组件生命周期和变化检测有关.但是,我对Angular 2和Electron都是一个新手.
关于可能发生的事情以及如何解决问题的任何指示或想法?