C# 具有Microsoft.Extensions.DependencyInjection和asp.net web api 2的拦截器,用于日志记录等横切问题
我们正在asp.net web api2中使用Microsoft.Extensions.DependencyInjection进行依赖项注入 对于诸如日志记录之类的横切关注点,我们认为应该考虑面向方面的编程,但在上述di中找不到任何支持 其他类似DI的castle、Unity和ninject都被选出了,因为它们的基准都很高。 有没有办法使用castle dynamic proxy等其他di框架的注入器,并将其与Microsoft.Extensions.DependencyInjection一起使用 也欢迎任何与IL编织框架相关的建议。C# 具有Microsoft.Extensions.DependencyInjection和asp.net web api 2的拦截器,用于日志记录等横切问题,c#,asp.net-web-api,dependency-injection,aop,cross-cutting-concerns,C#,Asp.net Web Api,Dependency Injection,Aop,Cross Cutting Concerns,我们正在asp.net web api2中使用Microsoft.Extensions.DependencyInjection进行依赖项注入 对于诸如日志记录之类的横切关注点,我们认为应该考虑面向方面的编程,但在上述di中找不到任何支持 其他类似DI的castle、Unity和ninject都被选出了,因为它们的基准都很高。 有没有办法使用castle dynamic proxy等其他di框架的注入器,并将其与Microsoft.Extensions.DependencyInjection一起使
不考虑PostSharp,因为它不是免费的。我不相信您在开发web api时需要PostSharp或任何其他AOP工具。有许多扩展点,您可以在其中插入日志记录/审核/任何操作。一个好的概述是
你可以创建一个。你可以(如果需要的话)或者一个例子。我认为你不需要任何AOP框架,.NET提供了足够的工具,可以自己完成大部分面向方面的工作 简短版本如下:
MarshallByRefObject
继承RealProxy
继承的类。e、 g.公共类日志方面:RealProxy
Entity e=EntityBuilder.WithLogging()代码>
新实体(…)
的所有实例替换为EntityBuilder.Get(…)
Castle.Core
动态代理的包装,旨在简化方法装饰
它与DI容器无关,但与Microsoft的DI集成,后者可在Decor.Extensions.Microsoft.DependencyInjection
NuGet软件包中找到
公共类yourdecotor:IDecorator
{
public SomeDependency SomeDependency{get;}
publicYourDecorator(SomeDependency SomeDependency)//支持DI。
{
SomeDependency=SomeDependency;
}
公用异步任务OnInvoke(调用)
{
...
等待呼叫。下一步();
...
}
}
[decoration(typeof(yourdcorator))]
virtual void SomeMethod()//我同意你的看法。但是,日志记录仅限于控制器。如何登录业务层/数据访问层的类,就像任何异常/自定义消息一样,而不直接调用记录器。我没办法,#39;我找不到任何关于此类日志记录/横切问题的信息。我认为Aop可以通过注入日志代码来帮助我。MS.DI非常有限。虽然使用动态侦听库(如CARSITY动态代理)应用截击机并不完全是不可能的,但您应该考虑使用更成熟和功能丰富的DI容器。