当前位置:首页 > Web开发 > 正文

所以你标记对应的类或接口时

2024-03-31 Web开发

标签:

构建根基项目及引入需要的包文件

autofac在net core 3.1的使用上与2.2有差别,所以在这里记录一下。

先创建一个简单的demo项目,控制台措施及api或者mvc模式都可以。

依次引入依赖包:

Autofac:供给容器控制 Autofac.Extensions.DependencyInjection:对autofac依赖注入进行扩展 Autofac.Extras.DynamicProxy:对autofac动态代办代理进行扩展 Castle.Core:使用动态代办代理的实现

  

技术图片

版本有不一致不妨,这里我加载的是对应的最新的包。

项目中使用

项目中使用有两个处所要注意:

1.在Program.cs的措施入口要指定使用autofac容器

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceProviderFactory(new AutofacServiceProviderFactory()) //指定使用autofac .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });

2.在Startup的启动文件中新增容器入口ConfigureContainer,默认要领及参数不得改削

技术图片

在这里我创建了一个接口ISay及实现要领Say,注入到容器中。

对应代码

public interface ISay { PeopleEntity SayHello(PeopleEntity peopleEntity); } [Intercept(typeof(InjectInterceptor))] public class Say : ISay { public PeopleEntity SayHello(PeopleEntity peopleEntity) { peopleEntity.Name = $"hello {peopleEntity.Name}"; return peopleEntity; } }

在这里我们使用的时候在控制器直接注入使用就行了

技术图片

在这里简单的使用autofac的容器使用就完成了。

下面我们来使用Castle来实现aop的使用

新建一个拦截器类,名为InjectInterceptor,,而且必需要实现IInterceptor(该接口在Castle.DynamicProxy中),即Intercept虚要领,该要领将通报IInvocation接口参数。

public class InjectInterceptor : IInterceptor { public virtual void Intercept(IInvocation invocation) { PreProceed(invocation); invocation.Proceed(); Console.WriteLine(invocation.ReturnValue); PostProceed(invocation); } private void PreProceed(IInvocation invocation) { Console.WriteLine($"{DateTime.Now} interceptor invoke start"); } private void PostProceed(IInvocation invocation) { Console.WriteLine($"{DateTime.Now} interceptor invoke end"); } }

  在这里,我符号Say的要领,这里指明Intercept只能符号类或接口,不能符号特定的要领,所以你符号对应的类或接口时,内部的要领城市被拦截。

[Intercept(typeof(InjectInterceptor))] public class Say : ISay

  在这里说明,这里是共同autofac使用的所以需要在Startup中的ConfigureContainer要领中注册拦截要领及注册这个Say要领时要开启允许要领拦截。

builder.RegisterType<InjectInterceptor>(); builder.RegisterType<Say>().As<ISay>().EnableInterfaceInterceptors();

  嗯,就这样。

net core 3.1使用autofac及Castle实现Aop切面编程

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30104.html