ASP .NET Core中依赖注入框架(DI)Autofac 4.0通过ConfigureContainer配置和使用示例

 
 
本文主要介绍ASP .NET Core中依赖注入框架(DI)Autofac 4.0通过ConfigureContainer配置和使用示例。

1、Autofac的配置

ASP.NET Core 1.1引入了具有强类型容器配置的能力。 它提供了一个ConfigureContainer方法,您可以使用Autofac单独注册,而不是使用ServiceCollection注册。

1)安装Autofac的Nuget包

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

2)使用ConfigureContainer配置

  • 在配置WebHostBuilderProgram.Main方法中,调用AddAutofacAutofac挂钩到启动管道中。
  • Startup类的ConfigureServices方法中,使用其他库提供的扩展方法将内容注册到IServiceCollection中。
  • Startup类的ConfigureContainer方法中,将内容直接注册到AutofacContainerBuilder中。

IServiceProvider将自动为您创建,因此除了注册外,您无需做任何事情。

2、在ASP .NET Core中使用ConfigureContainer配置Autofac示例代码

public class Program
{
  public static void Main(string[] args)
  {
     //此处的ConfigureServices调用允许
     //在Startup with中支持ConfigureContainer
     //一个强类型的ContainerBuilder。
    var host = new WebHostBuilder()
        .UseKestrel()
        .ConfigureServices(services => services.AddAutofac())
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
  }
}

public class 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 IConfigurationRoot Configuration { get; private set; }

   //在ConfigureServices中注册依赖项。
   //在下面的ConfigureContainer方法之前由运行时调用。
  public void ConfigureServices(IServiceCollection services)
  {
   //将服务添加到集合中。 不建造或返回
     //任何IServiceProvider或ConfigureContainer方法
     //不会被调用。
    services.AddMvc();
  }

   //您可以在ConfigureContainer中直接注册内容
   //使用Autofac。 这在ConfigureServices之后运行
   //这里将覆盖在ConfigureServices中进行的注册。
   //不要建造容器; 为你做完了。 如果你
   //需要对容器的引用,你需要使用
   //后面会显示“没有ConfigureContainer”机制。
  public void ConfigureContainer(ContainerBuilder builder)
  {
      builder.RegisterModule(new AutofacModule());
  }

   //配置是添加中间件的位置。 这称之为
   // ConfigureContainer。 您可以使用IApplicationBuilder.ApplicationServices
   //如果你需要从容器中解决问题。
  public void Configure(
    IApplicationBuilder app,
    ILoggerFactory loggerFactory)
  {
      loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
      loggerFactory.AddDebug();
      app.UseMvc();
  }
}



1.首先nuget引入

Autofac

Autofac.Extensions.DependencyInjection

2.修改Program.cs 添加.UseServiceProviderFactory(new AutofacServiceProviderFactory())

复制代码
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
复制代码

3.修改Startup.cs

添加 services.AddControllersWithViews().AddControllersAsServices(); 

        public void ConfigureServices(IServiceCollection services)
        {
        services.AddControllersWithViews().AddControllersAsServices();
        }    

添加

1
2
3
4
public void ConfigureContainer(ContainerBuilder builder)
{
    // 在这里添加服务注册
}<br><br><br>

完成现在就可以在控制器中注入方法了。

 


public void ConfigureContainer(ContainerBuilder builder)
{
var assemblysServices = Assembly.Load("OmsServer");//模式是 Load(解决方案名)//要记得!!!这个注入的是实现类层,不是接口层!不是 IServices
builder.RegisterAssemblyTypes(assemblysServices).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces();//指定已扫描程序集中的类型注册为提供所有其实现的接口。
}

原文:https://www.cnblogs.com/lr215/p/11600577.html

原文地址:https://www.cnblogs.com/yyzyou/p/13650625.html