zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SVO深度解析(三)之深度滤波(建图部分)
    SVO深度解析(二)之跟踪部分
    SVO深度解析(一)之简介和评价
    图像三维重建方法综述
    SLAM优化位姿时,误差函数的雅可比矩阵的推导。
    Canny边缘检测原理与C++实现(2)实现部分
    Canny边缘检测原理与C++实现(1)原理部分
    指针的大小是谁决定的
    Ubuntu 16.04配置CUDA 9.0+cudnn 7.0以及解决Nvidia显卡导致黑屏问题
    安装FAB-Map 2.0,Ubtuntu 16.04
  • 原文地址:https://www.cnblogs.com/yyzyou/p/13650625.html
Copyright © 2011-2022 走看看