首页 .Net ASP .NET Core Autofac 4.0使用ContainerBuilder(Populate)配置和示例代码

ASP .NET Core Autofac 4.0使用ContainerBuilder(Populate)配置和示例代码

1、Autofac的配置

如果您需要更灵活地构建容器的方式,或者如果您需要实际存储对构建容器的引用,则需要跳过使用ConpContainer并在ConpServices期间注册所有内容。 这也是您为ASP.NET Core 1.0采用的途径方法。

1)通过Microsoft.Extensions.DependencyInjection包在ASP .NET Core应用程序中使用用Autofac。

在Nuget管理程序中,搜索'Autofac.Extensions.DependencyInjection' =》选中然后点击'安装'

2)使用ContainerBuilder(Populate)配置

Startup类的ConpServices方法中

  • 通过Populate将服务从IServiceCollection注册到ContainerBuilder
  • 直接在ContainerBuilder中注册服务。
  • Build容器(container)
  • 使用容器创建一个AutofacServiceProvider并将其返回。

2、在ASP .NET Core中使用ContainerBuilder(Populate)配置Autofac示例代码

public >Startup
{
  public Startup(IHostingEnvironment env)
  {
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    this.Configuration = builder.Build();
  }
  public IContainer ApplicationContainer { get; private set; }
  public IConfigurationRoot Configuration { get; private set; }
   //在ConpServices中注册依赖项。
   //在下面的Conp方法之前由运行时调用。
  public IServiceProvider ConpServices(IServiceCollection services)
  {
   //将服务添加到集合中。
    services.AddMvc();
    //创建 container builder.
    var builder = new ContainerBuilder();
     //注册依赖项,填充服务
     //集合,并构建容器。
     //
     //请注意,Populate基本上是添加内容的foreach
     //进入集合中的Autofac。 如果你注册
     //在Autofac之前的东西填充然后填充的东西
     // ServiceCollection可以覆盖那些东西; 如果你注册
     // AFTER填充这些注册可以覆盖的东西
     //在ServiceCollection中。 根据需要混合搭配。
    builder.Populate(services);
    builder.RegisterType<MyType>().As<IMyType>();
    this.ApplicationContainer = builder.Build();
   //根据容器创建IServiceProvider
    return new AutofacServiceProvider(this.ApplicationContainer);
  }
   //配置是添加中间件的位置。 这称之为
   // ConpServices。 您可以使用IApplicationBuilder.ApplicationServices
   //如果你需要从容器中解决问题。
  public void Conp(
    IApplicationBuilder app,
    ILoggerFactory loggerFactory,
    IApplicationLifetime appLifetime)
  {
      loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
      loggerFactory.AddDebug();
      app.UseMvc();
      //从Autofac.Extensions.DependencyInjection 4.3.0开始,AutofacDependencyResolver
      //实现IDisposable并将与应用程序容器一起处理
      //当应用程序停止并且WebHost处理它时
      //
      //在4.3.0之前,如果要处理已在中解析的资源
      //应用程序容器,注册“ApplicationStopped”事件。
      //如果直接引用容器,则只能执行此操作
      //所以它不适用于上面的ConpContainer机制。
      // appLifetime.ApplicationStopped.Register(()=>           this.ApplicationContainer.Dispose());
      //Cóng Autofac.Extensions.DependencyInjection 4.3.0 
  }
}

相关文档ASP .NET Core Autofac 4.0使用ConpContainer配置和示例代码

特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。