asp.net core 3.1 autofac配置

nuget引入包

  Autofac (5.2.0)

  Autofac.Extensions.DependencyInjection (6.0.0)

 

1、替换默认容器

 修改Program.cs下的CreateHostBuilder

    UseServiceProviderFactory(new AutofacServiceProviderFactory())

2、批量注入

  Startup.cs中添加

   public void ConfigureContainer(ContainerBuilder builder){
    Assembly service = Assembly.Load("AutofacNetCore.Service");
    Assembly iservice = Assembly.Load("AutofacNetCore.IService");  
    builder.RegisterAssemblyTypes(service, iservice)
    .Where(t => t.FullName.EndsWith("Service") && !t.IsAbstract) //类名以service结尾,且类型不能是抽象的 
    .InstancePerLifetimeScope() //生命周期,,
    .AsImplementedInterfaces()
    .PropertiesAutowired(); //属性注入
   }

   如果需要在controller中使用属性注入,则需要修改Stratup.cs中的ConfigureServices方法和ConfigureContainer方法

ConfigureServices:
  services.AddControllersWithViews().AddControllersAsServices();

ConfigureContainer:
  var controllerBaseType = typeof(ControllerBase); 
  builder.RegisterAssemblyTypes(typeof(Program).Assembly)
  .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
  .PropertiesAutowired();

3、使用

  

 

       红色为构造函数注入,蓝色为属性注入

  属性注入必须为public

    

 

posted @ 2020-05-19 17:17  sdonian  阅读(932)  评论(0)    收藏  举报