ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

autofac整合MVC

2021-02-08 22:03:12  阅读:139  来源: 互联网

标签:autofac Autofac 整合 控制器 MVC 注册 services public 注入


Autofac整合MVC:

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】方法,用来注册服务关系。

public void ConfigureContainer(ContainerBuilder containerBuilder)
{
    // Register your own things directly with Autofac, like:
    containerBuilder.RegisterType<TestServiceA>().As<ITestServiceA>();
}

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。

  注册方式:

  

  

标签:autofac,Autofac,整合,控制器,MVC,注册,services,public,注入
来源: https://www.cnblogs.com/Xieyiincuit/p/14386839.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有