zoukankan      html  css  js  c++  java
  • 024.NET5_Autofac整合.NET5MVC

    Autofac整合.NET5MVC

    Autofac是一个第三方容器

    1) 指定Autofac工厂替换默认工厂,在【Program.cs】中的【CreateHostBuilder】方法中指定。

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

    2) 在【Startup.cs】类中增加一个【ConfigureContainer】方法,用来注册服务关系。

     3) 通过控制器构造函数注入,获取实例。

    获取方式与Asp.Net Core中的 Controller injection 一致。

     对于Asp.Net Core 保留的依赖注入方法也是可以使用的,因为Autofac在对服务进行注册时会将IServicesCollection中已经注册的服务整合进来。

     控制器中的属性注入:

    1) 通过在用service collection注册MVC时指定 AddControllersAsServices() , 你可以改变这个行为. 这么做可以在service provider factory调用 builder.Populate(services) 时自动注册控制器类型到 IServiceCollection.

    2) 在ConfigureContainer中注册控制器为服务,控制器中的服务便可以通过属性注入.

    public void ConfigureServices(IServiceCollection services)
      {
        // Add controllers as services so they'll be resolved.
        services.AddMvc().AddControllersAsServices();
      }
    
      public void ConfigureContainer(ContainerBuilder builder)
      {
        // If you want to set up a controller for, say, property injection
        // you can override the controller registration after populating services.
        builder.RegisterType<MyController>().PropertiesAutowired();
      }

     如以下例子: 我需要将两个服务分别注入HomeController,一个ITestServiceA通过默认的构造函数注入,ITestServiceB通过属性注入,而且ITestServiceB中又属性注入了ITestServiceA。

      注册方式:

  • 相关阅读:
    composer在phpstorm中安装代码库
    [C#]WinForm 中 comboBox控件之数据绑定
    【建模+强连通分量】POJ1904 King's Quest
    【构造】UVa 11387 The 3-Regular Graph
    【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士
    【强连通分量+spfa】Bzoj1179 Apio2009 Atm
    【树形dp】Bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏
    【dfs+连通分量】Bzoj1123 POI2008 BLO
    【强连通分量+概率】Bzoj2438 杀人游戏
    【强连通分量】Bzoj1194 HNOI2006 潘多拉的盒子
  • 原文地址:https://www.cnblogs.com/ljg3020/p/14410258.html
Copyright © 2011-2022 走看看