如何实现用于装饰方法和使用依赖项注入的自定义属性?

时间:2019-02-28 07:59:24

标签: c# attributes decorator

我想使用这样的属性来修饰方法:

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操作。是否有任何方法也可以通过普通方法来实现属性呢?

0 个答案:

没有答案