.Net Core Autofac

打印 上一主题 下一主题

主题 492|帖子 492|积分 1476


目录

Autofac

Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 . 它的实现方式是将常规的.net类当做 组件 处理.
控制反转背后的核心思想是, 我们不再将应用中的类捆绑在一起, 让类自己去 “new up” 他们的依赖, 而是反过来在类的构造方法中将依赖传递进去.
中文文档
引用
  1. <ItemGroup>
  2.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  3.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  4. </ItemGroup>
复制代码
Program.cs
  1. //添加 autofac
  2. builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
  3. builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
  4. {
  5.     builder.RegisterModule<AutofacConfig>();
  6. });
复制代码
AutofacConfig.cs
  1. using Autofac;using Autofac.Extras.DynamicProxy;using Cnpc.Com.Ioc.Bll;using Cnpc.Com.Ioc.Dal;using Cnpc.Com.Ioc.IBll;using Cnpc.Com.Ioc.IDal;using Cnpc.Com.Ioc.Tools;namespace Cnpc.Com.AutofacTest.Autofac{    public class AutofacConfig : Module    {<ItemGroup>
  2.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  3.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  4. </ItemGroup>protected override void Load(ContainerBuilder builder)<ItemGroup>
  5.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  6.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  7. </ItemGroup>{<ItemGroup>
  8.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  9.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  10. </ItemGroup>    //ioc<ItemGroup>
  11.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  12.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  13. </ItemGroup>    builder.RegisterType().As(); //构造函数注入<ItemGroup>
  14.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  15.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  16. </ItemGroup>    builder.RegisterType().As().PropertiesAutowired(new PropertySelection()).OnActivated(it =><ItemGroup>
  17.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  18.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  19. </ItemGroup>    {<ItemGroup>
  20.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  21.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  22. </ItemGroup><ItemGroup>
  23.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  24.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  25. </ItemGroup>it.Instance.SetIWriten(it.Context.Resolve());<ItemGroup>
  26.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  27.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  28. </ItemGroup>    }).EnableInterfaceInterceptors(); //属性注入 + 指定属性注入 + 指定方法注入 + 开启Aop<ItemGroup>
  29.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  30.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  31. </ItemGroup>     //aop<ItemGroup>
  32.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  33.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  34. </ItemGroup>    builder.RegisterType();<ItemGroup>
  35.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  36.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  37. </ItemGroup>    builder.RegisterType();<ItemGroup>
  38.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  39.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  40. </ItemGroup>}    }}
复制代码
Aop AutofacInterceptor.cs
  1. using Castle.DynamicProxy;using Microsoft.Extensions.Logging;using NLog;namespace Cnpc.Com.Ioc.Tools{    public class AutofacInterceptor : IInterceptor    {<ItemGroup>
  2.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  3.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  4. </ItemGroup>//支持NOP<ItemGroup>
  5.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  6.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  7. </ItemGroup>    ILogger logger;<ItemGroup>
  8.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  9.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  10. </ItemGroup>public AutofacInterceptor(ILogger logger)<ItemGroup>
  11.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  12.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  13. </ItemGroup>{<ItemGroup>
  14.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  15.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  16. </ItemGroup>    this.logger = logger;<ItemGroup>
  17.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  18.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  19. </ItemGroup>}<ItemGroup>
  20.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  21.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  22. </ItemGroup>public void Intercept(IInvocation invocation)<ItemGroup>
  23.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  24.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  25. </ItemGroup>{<ItemGroup>
  26.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  27.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  28. </ItemGroup><ItemGroup>
  29.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  30.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  31. </ItemGroup><ItemGroup>
  32.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  33.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  34. </ItemGroup>{<ItemGroup>
  35.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  36.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  37. </ItemGroup><ItemGroup>
  38.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  39.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  40. </ItemGroup>logger.LogInformation("执行前");<ItemGroup>
  41.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  42.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  43. </ItemGroup><ItemGroup>
  44.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  45.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  46. </ItemGroup>Console.WriteLine("执行前: " + DateTime.Now.ToString() + "此消息来自:" + this.GetType().FullName) ;<ItemGroup>
  47.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  48.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  49. </ItemGroup>    }<ItemGroup>
  50.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  51.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  52. </ItemGroup>    invocation.Proceed();<ItemGroup>
  53.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  54.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  55. </ItemGroup>    {<ItemGroup>
  56.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  57.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  58. </ItemGroup><ItemGroup>
  59.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  60.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  61. </ItemGroup>Console.WriteLine("执行后: " + DateTime.Now.ToString() + "此消息来自:" + this.GetType().FullName);<ItemGroup>
  62.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  63.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  64. </ItemGroup>    }<ItemGroup>
  65.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  66.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  67. </ItemGroup>}    }}
复制代码
测试接口+实现

IStudent.cs
  1. using Autofac.Extras.DynamicProxy;using Cnpc.Com.Ioc.IDal;using Cnpc.Com.Ioc.Tools;using Microsoft.Extensions.Logging;namespace Cnpc.Com.Ioc.IBll{    [Intercept(typeof(TestAutofacInterceptor))]    public interface IStudent    {<ItemGroup>
  2.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  3.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  4. </ItemGroup>IWrite Write { get; set; }<ItemGroup>
  5.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  6.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  7. </ItemGroup>IWrite Write1 { get; set; }<ItemGroup>
  8.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  9.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  10. </ItemGroup>IWrite Write2 { get; set; }<ItemGroup>
  11.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  12.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  13. </ItemGroup>IWrite Write3 { get; set; }<ItemGroup>
  14.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  15.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  16. </ItemGroup>IWrite Write4 { get; set; }<ItemGroup>
  17.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  18.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  19. </ItemGroup>IWrite Write5 { get; set; }<ItemGroup>
  20.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  21.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  22. </ItemGroup>ILogger logger { get; set; }<ItemGroup>
  23.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  24.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  25. </ItemGroup>IWrite Write6 { get; set; }<ItemGroup>
  26.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  27.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  28. </ItemGroup>IWrite WriteContainer { get; set; }<ItemGroup>
  29.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  30.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  31. </ItemGroup>void SetIWriten(IWrite write);<ItemGroup>
  32.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  33.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  34. </ItemGroup>void DoHomeWork(IWrite writen);<ItemGroup>
  35.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  36.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  37. </ItemGroup>void Calligraphy(IWrite writen);    }}
复制代码
Student.cs
  1. using Autofac.Extras.DynamicProxy;using Cnpc.Com.Ioc.IBll;using Cnpc.Com.Ioc.IDal;using Cnpc.Com.Ioc.Tools;using Microsoft.Extensions.Logging;using NLog;namespace Cnpc.Com.Ioc.Bll{    [Intercept(typeof(AutofacInterceptor))]    public class Student : IStudent    {<ItemGroup>
  2.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  3.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  4. </ItemGroup>[PropertySelecction]<ItemGroup>
  5.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  6.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  7. </ItemGroup>public IWrite Write { get; set ; }<ItemGroup>
  8.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  9.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  10. </ItemGroup>public IWrite WriteContainer { get ; set ; }<ItemGroup>
  11.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  12.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  13. </ItemGroup>public IWrite Write1 { get ; set ; }<ItemGroup>
  14.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  15.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  16. </ItemGroup>public IWrite Write2 { get ; set ; }<ItemGroup>
  17.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  18.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  19. </ItemGroup>public IWrite Write3 { get ; set ; }<ItemGroup>
  20.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  21.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  22. </ItemGroup>public IWrite Write4 { get ; set ; }<ItemGroup>
  23.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  24.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  25. </ItemGroup>public IWrite Write5 { get ; set ; }<ItemGroup>
  26.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  27.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  28. </ItemGroup>public IWrite Write6 { get ; set ; }<ItemGroup>
  29.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  30.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  31. </ItemGroup><ItemGroup>
  32.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  33.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  34. </ItemGroup> //支持Nlog 属性注入<ItemGroup>
  35.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  36.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  37. </ItemGroup>[PropertySelecction]<ItemGroup>
  38.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  39.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  40. </ItemGroup>public ILogger logger { get ; set ; }<ItemGroup>
  41.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  42.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  43. </ItemGroup>public void Calligraphy(IWrite writen)<ItemGroup>
  44.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  45.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  46. </ItemGroup>{<ItemGroup>
  47.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  48.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  49. </ItemGroup>    writen.Write();<ItemGroup>
  50.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  51.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  52. </ItemGroup>}<ItemGroup>
  53.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  54.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  55. </ItemGroup>public void DoHomeWork(IWrite writen)<ItemGroup>
  56.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  57.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  58. </ItemGroup>{<ItemGroup>
  59.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  60.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  61. </ItemGroup>    logger.LogInformation("wow");<ItemGroup>
  62.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  63.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  64. </ItemGroup>    writen.Write();<ItemGroup>
  65.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  66.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  67. </ItemGroup>}<ItemGroup>
  68.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  69.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  70. </ItemGroup>public void SetIWriten(IWrite write)<ItemGroup>
  71.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  72.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  73. </ItemGroup>{<ItemGroup>
  74.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  75.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  76. </ItemGroup>    this.WriteContainer = write;<ItemGroup>
  77.     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
  78.     <PackageReference Include="Castle.Core" Version="5.1.1" />
  79. </ItemGroup>}    }}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表