我想使用这样的属性来修饰方法:
public class MyAttribute : Attribute
{
public MyAttribute(Dependency1 dependency1, ..., DependencyN dependencyN)
{...}
public void OnMethodExecution(MethodDelegate next)
{
// do stuff...
next();
// do stuff...
}
public async void OnMethodExecutionAsync(MethodDelegate next)
{
// do stuff...
await next();
// do stuff...
}
}
public class MyClass
{
[MyAttribute]
public void DoStuff()
{...}
[MyAttribute]
private void DoSomePrivateStuff()
{...}
}
当然,我可以为每个类编写装饰器类,但这将导致大量重复代码。而且我不得不公开要装饰的私有方法。目前,我们实现它的方式更加糟糕。装饰代码在一个类中,该类将注入到所有其他类中,并将方法调用传递给装饰器方法,如下所示:
var resuitl = await _myDecorator.Decorate(async () => await DoStuff(someParameters));
说出我不想在业务逻辑代码中看到的内容。
我碰到了ActionFilterAttribute
,实际上它已经可以满足我的要求。甚至可以在[ServiceFilter(typeof(MyActionAttribute))]
中使用依赖项注入。但不幸的是,它仅适用于MVC操作。是否有任何方法也可以通过普通方法来实现属性呢?