首页 > 其他分享 >Autofac的几种方式

Autofac的几种方式

时间:2023-12-06 15:36:28浏览次数:27  
标签:builder Autofac 方式 容器 app 几种 Host public

.net下优秀的IOC容器框架Autofac的使用方法,实例解析 - 知乎 (zhihu.com)

 

UseServiceProviderFactory(使用服务提供商) 是在 ASP.NET Core 中用来替换默认的依赖注入容器工厂的方法
通过使用不同的容器工厂,可以使用第三方的依赖注入容器(如 Autofac、Ninject 等),以替代默认的 ASP.NET Core 依赖注入容器。

具体来说,UseServiceProviderFactory 方法接受一个实现了 IServiceProviderFactory<TContainerBuilder> 接口的容器工厂实例作为参数。
该接口定义了一个 CreateBuilder 方法,用于创建容器构建器,并在其上进行配置。
CreateBuilder 方法将在应用程序启动时被调用,用于创建容器构建器,以及在其中进行服务的注册和配置。

1.Main方法中代码

public static void Main(string[] args)
{
    var builder = WebApplication.CreateBuilder(args);
    // Add services to the container.
    //使用AutoFac 方式
    builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

    builder.Services.AddControllers();
    // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    builder.Services.AddEndpointsApiExplorer();    
    //Swagger UI
    builder.Services.AddSwaggerGen();
//使用.NET Generic Host 中的 ConfigureContainer 方法来配置依赖注入容器。 //在这里,使用了 Autofac 容器,因此使用的是 ContainerBuilder 类型。 //具体来说,.Host.ConfigureContainer<ContainerBuilder>(x => { ... }) 这段代码表示在 Generic Host 的构建过程中,对依赖注入容器进行配置。 //其中的 x 是一个 ContainerBuilder 类型的参数,用于注册依赖项 //在代码中,通过 RegisterModule 方法注册了一个名为 TestCoreModule 的模块,这个模块实现了 Autofac 的 Module 类 //在 TestCoreModule 中可以包含一些特定的服务注册逻辑,以便在整个应用程序中使用 builder.Host.ConfigureContainer<ContainerBuilder>(x => { //TestCoreModule 是一个实现了AutoFac.Module 的一个类Module x.RegisterModule(new TestCoreModule()); }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); }

2.TesCoreModule的实现

using Autofac;
namespace AutofacServiceDemo
{
    public class TestCoreModule: Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<SonCaseService>().As<ICaseService>().InstancePerLifetimeScope();
        }
    }
}

3:接口和派生类(业务层面)

namespace AutofacServiceDemo
{
    public interface ICaseService
    {
        string Ret();
    }

    public class SonCaseService : ICaseService
    {
        public string Ret()
        {
            return "我是实现类";
        }
    }
}

4:控制器层面

using Microsoft.AspNetCore.Mvc;

namespace AutofacServiceDemo.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class TestController : Controller
    {

        private readonly ICaseService _caseService;

        public TestController(ICaseService caseService)
        {
            _caseService = caseService;
        }

        [HttpPost()]
        public IActionResult Index(string id,string name)
        {
            var ret = _caseService.Ret();
            return Ok();
        }
    }
}

 

标签:builder,Autofac,方式,容器,app,几种,Host,public
From: https://www.cnblogs.com/ZkbFighting/p/17879620.html

相关文章

  • git~为github三方仓库添加贡献的正确方式
    为github三方仓库添加贡献如果希望成为某些开源框架的贡献者,例如如希望加入higress、keycloak、ruoyi这些框架的开发者行列,那么今天的文章应该可以帮到您。克隆和拉取项目FORKHigress到您的存储库。要完成这项工作,您只需单击alibaba/higress主页右侧的Fork按钮。然后你......
  • fastapi的两种启动方式
     代码文件中启动if__name__=='__main__':uvicorn.run('test:app')#其中test为当前py文件,app为FastAPI的实例对象,这样启动默认为http://127.0.0.1:8000,可自行配置host,port,workers,reload等参数。终端启动#cd到启动文件同目录#终端执行uvicorntest:app--reloa......
  • ECharts饼图颜色设置的4种方式总结
    信铁寒胜实测:用了下面第三种方式,改了饼状图的颜色 ECharts饼状图颜色设置教程方法一:在 series 内配置饼状图颜色方法二:在 option 内配置饼状图颜色方法三:在 data 内配置饼状图颜色方法四:配置ECharts饼状图随机颜色Charts饼状图中的每个扇形颜色其实都可以自......
  • linux安装postgresql三种方式【转】
    linux下安装PostgreSQL可采用三种方式,二进制已编绎安装包、安装、源码安装三种方式进行安装方式1:yum安装,建议使用这种参看官方文档如下地址:sudoyuminstall-ysudoyuminstall-ypostgresql15-serversudo/usr/pgsql-15/bin/postgresql-15-setupinitdbsudosystemctlena......
  • 金属制品ERP有哪几种?金属制品ERP都有什么作用
       市面上的金属制品种类繁多,这些多种多样的商品有差异化的营销策略、价格机制、生产工序、制造工艺、外观和品质等,部分金属制品还存在生产过程工艺多变、物料种类多、成本核算困难等情况。除此之外,不同类型的金属制品还有差异化的经营模式和管理方法,繁杂的业务数据统计......
  • 鸿蒙开发丨设备内UIAbility的几种交互方式
    本文分享自华为云社区《设备内UIAbility交互:无缝体验与高级技巧》,作者:柠檬味拥抱。UIAbility组件间交互(设备内)在设备内,UIAbility(用户界面能力)是系统调度的最小单元,它们负责展示用户界面和执行相关的业务逻辑。设备内的不同功能模块之间的交互是应用程序开发中的重要部分。本文......
  • 《优化接口设计的思路》系列:第六篇—接口防抖(防重复提交)的一些方式
    一、前言大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多租......
  • 对比传统跨网文件交换方式,文件摆渡系统拥有这4大优势!
    网络隔离已是较为常见的网络安全保护措施,越来越多公司进行隔离网建设来隔绝外部网络有害攻击,但隔离后不少数据和文件仍需进行流转,就产生了跨网数据交换需求,在过去,企业使用较多的传统跨网文件交换方式有移动介质、网盘、FTP应用等,这些传统跨网文件交换方式一定程度上解决了企业的数......
  • 字符的编码方式(ASCII、ANSI、Unicode)
    本篇博客大致介绍了字符的三种编码格式:ASCII、ANSI、Unicode,并比较浅显的解释了其编码过程,在写这篇博客的时候,参考了以下链接:【字符编码】彻底理解字符编码-leesf-博客园(cnblogs.com)一篇搞懂UnicodeANSIUTF8等字符编码-知乎(zhihu.com)UTF-8到底是什么意思?unicode......
  • 《优化接口设计的思路》系列:第六篇—接口防抖(防重复提交)的一些方式
    一、前言大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。作为一名从业已达六年的老码农,我的工作主要是开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多......