c# - 带有 Microsoft.Extensions.DependencyInjection 和 asp.net web api 2 的拦截器,用于横切关注点,例如日志记录

标签 c# asp.net-web-api dependency-injection aop cross-cutting-concerns

我们在我们的 asp.net web api2 中使用 Microsoft.Extensions.DependencyInjection 进行依赖注入(inject)。

对于像日志这样的横切关注点,我们认为应该考虑面向方面的编程,在上面的 di 中找不到任何支持。

其他 DI,如 caSTLe、Unity 和 ninject,在查看他们的基准后选择退出。
有没有办法使用其他 di 框架的注入(inject)器,如城堡动态代理并将其与 Microsoft.Extensions.DependencyInjection 一起使用?

也欢迎任何与 IL 编织框架相关的建议。
PostSharp 的考虑被排除在外,因为它不是免费的。

最佳答案

Decor.NETCastle.Core 的包装器动态代理,旨在简化方法修饰。
它与 DI 容器无关,但与 Microsoft 的 DI 集成,可在 Decor.Extensions.Microsoft.DependencyInjection 中获得NuGet 包。

  • 你创建一个装饰器:
    public class YourDecorator : IDecorator
    {    
        public SomeDependency SomeDependency { get; }    
    
        public YourDecorator(SomeDependency someDependency) // Supports DI.
        {
            SomeDependency = someDependency;
        }
    
        public async Task OnInvoke(Call call)
        {
            ...
            await call.Next();
            ...
        }
    }
    
  • 装饰你的方法:
    [Decorate(typeof(YourDecorator))]
    virtual void SomeMethod()  // << has to be overridable (can come from an interface)
    {
        ...
    }
    
  • 在 Microsoft 的 DI 中注册所有内容:
    services.AddDecor()
        .AddTransient<YourDecorator>()
        .AddScoped<YourService>().Decorated();
    

  • 您可以在此.Net Fiddle 中玩耍.

    披露:我是这个包的作者。

    关于c# - 带有 Microsoft.Extensions.DependencyInjection 和 asp.net web api 2 的拦截器,用于横切关注点,例如日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51226131/

    相关文章:

    c# - 密码框中的水印

    c# - 在运行时将委托(delegate)转换为 Action<T> 或 Func<T>

    c# - flickr oauth 签名无效错误

    c# - ResolutionFailedException 返回成功

    c# - 为什么我必须指定 [FromUri] 才能让它工作?

    java - 如何为移至库的类工厂反转依赖关系

    java - SpringBoot : Unsatisfied dependency NoSuchBeanDefinitionException, 期望至少有 1 个有资格作为 Autowiring 候选者的 bean

    c# - 将 WPF 扩展工具包 ColorPicker SelectedColor 属性绑定(bind)到 DependencyProperty

    asp.net-web-api - JwtBearerAuthenticationOptions 不包含 IssuerSecurityTokenProviders 的定义

    asp.net-mvc - Ninject依赖注入(inject): Read bindings from config?