C#开发常用的库使用-Ioc库Autofac的使用

介绍

Autofac 是一个适用于 .NET 的强大的 IoC(控制反转)容器。它管理类之间的依赖关系,使得随着应用程序规模和复杂性的增长,应用程序仍然易于修改。它允许您管理 .NET 应用程序中的组件依赖关系,并自动将依赖项解析到它们所需的对象中。Autofac 提供了一个灵活的、功能丰富的 API,使您可以轻松地配置和使用依赖注入。

安装

在Nuget中安装Autofac包

在这里插入图片描述

使用

基本流程

使用Autofac的Ioc容器基本流程:

  1. 创建容器创建器
  2. 往容器中注册对应的类型和对象
  3. 创建容器
  4. 使用容器
 //容器创建器
 ContainerBuilder builder = new ContainerBuilder();
 //注册类型
builder.RegisterType<MyService>();
//创建容器
var container=builder.Build();
//使用容器,获取实例
var service = container.Resolve<MyService>();


不同类型注册方式

类型注册

使用RegisterType注册

builder.RegisterType<MyService>();

接口和实现类对应的注册

使用RegisterTypeAs注册

使用的使用直接获取IMyService,自动创建MyService对象

  builder.RegisterType<MyService>().As<IMyService>();

泛型注册

使用RegisterGeneric进行注册

builder.RegisterGeneric(typeof(Repository<>));

不同生命周期的注册

瞬态

直接注册都是瞬态的,每次使用都new一个新的对象

单例

只会在第一次使用时生成一个单例对象

builder.RegisterType<MyService>().SingleInstance();

使用

直接使用

使用Resolve方法直接获取对象

 var test = container.Resolve<Test>();

构造方法注入

使用容器创建对象时,会自动生成构造方法需要的对象,并传入参数

前提是参数也在容器中注册过

public class Test
{
    private IMyService _myService;

    private string _name;


    public Test(IMyService service)
    {
        _myService=service;
    }
}

//使用
// 使用容器创建Test时,会自动生成IMyService对象,并传入参数
var test = container.Resolve<Test>();

带参数传入

在使用容器创建时,需要自动注入一些服务的同时,还需要自己传入参数的参数的情况如下使用

 var test2 = container.Resolve<Test>(new NamedParameter("name","abc"));

使用NamedParameter类型进行参数,第一个是参数名称,第二个是参数的值

示例:

public class Test
{
    private IMyService _myService;

    private string _name;


    public Test(string name,IMyService service)
   {
       _name = name;
       _myService = service;
   }
}

//使用
 var test2 = container.Resolve<Test>(new NamedParameter("name","abc"));

相关推荐

  1. dotnet依赖注入与IOC(包含Autofac使用)

    2024-04-06 05:32:13       21 阅读
  2. C++常用

    2024-04-06 05:32:13       18 阅读
  3. 开发常用组件

    2024-04-06 05:32:13       7 阅读
  4. torchsummary使用

    2024-04-06 05:32:13       34 阅读
  5. Gson 使用

    2024-04-06 05:32:13       25 阅读
  6. muduo使用

    2024-04-06 05:32:13       12 阅读
  7. C 语言 xml 使用

    2024-04-06 05:32:13       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 05:32:13       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 05:32:13       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 05:32:13       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 05:32:13       20 阅读

热门阅读

  1. 【RV1126】Ubuntu22.04下sdk编译问题汇集

    2024-04-06 05:32:13       13 阅读
  2. c#中DocFx生成API帮助文档

    2024-04-06 05:32:13       15 阅读
  3. 点云滤波与匹配进阶

    2024-04-06 05:32:13       16 阅读
  4. 添加背景图片画图matlab

    2024-04-06 05:32:13       14 阅读
  5. 【QT教程】QT6单元测试

    2024-04-06 05:32:13       17 阅读
  6. SPI协议

    SPI协议

    2024-04-06 05:32:13      15 阅读
  7. ubuntu23.10全家桶(date2024.4.3)

    2024-04-06 05:32:13       19 阅读
  8. nginx: 集群环境配置搭建

    2024-04-06 05:32:13       14 阅读
  9. Rust个人学习之单元测试

    2024-04-06 05:32:13       16 阅读
  10. 【PyQt】读取MySQL数据填充到Qt表格控件中

    2024-04-06 05:32:13       14 阅读