.NET中IoC框架Autofac用法讲解

作者:南荣相如谈编程 时间:2024-06-05 09:26:21 

1 前置阅读

在阅读本文章之前,你可以先阅读:

  • 什么是依赖注入

2 简介

Autofac与C#语言的结合非常紧密,并学习它非常的简单,也是.NET领域最为流行的IoC框架之一。

3 使用

首先,将Autofac的NuGet软件包安装到您的应用程序中。


Autofac

然后,我们通过创建ContainerBuilder来注册组件。


var builder = new ContainerBuilder();
builder.RegisterType<Knife>();
builder.RegisterType<Actor>();

接着,可以通过在一个已存在的生命周期上调用 BeginLifetimeScope() 方法来创建另一个生命周期作用域, 以根容器作为起始。生命周期作用域是可释放的并且追踪组件的释放, 因此确保你总是调用了 "Dispose()"" 或者把它们包裹在 "using" 语句内。


using (var scope = container.BeginLifetimeScope())
{
}

最后,在注册完组件并暴露相应的服务后, 你可以从创建的容器或其子生命周期中解析服务. 让我们使用 Resolve() 方法来实现:


using (var scope = container.BeginLifetimeScope())
{
   var actor = scope.Resolve<Actor>();
   actor.Kill();
}

让我们来看看完整代码:


using System;

namespace Autofac.ConsoleApp
{
   class Program
   {
       static void Main(string[] args)
       {
           var builder = new ContainerBuilder();
           builder.RegisterType<Knife>();
           builder.RegisterType<Actor>();

var container = builder.Build();
           using (var scope = container.BeginLifetimeScope())
           {
               var actor = scope.Resolve<Actor>();
               actor.Kill();
           }

Console.ReadKey();
       }
   }
}

让我们来看看输出结果:


小明用刀杀怪

4 在 Asp.Net Core 中使用

首先,将Autofac,Autofac.Extensions.DependencyInjection的NuGet软件包安装到您的应用程序中。


dotnet add package Autofac
dotnet add package Autofac.Extensions.DependencyInjection

然后,在Program.Main中增加.UseServiceProviderFactory(new AutofacServiceProviderFactory())


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

接着,在Startup.ConfigureServices中增加services.AddControllersWithViews();


public void ConfigureServices(IServiceCollection services)
{
   services.AddControllers();
   services.AddSwaggerGen(c =>
   {
       c.SwaggerDoc("v1", new OpenApiInfo { Title = "Autofac.WebApi", Version = "v1" });
   });

services.AddControllersWithViews();
}

接着,在Startup.ConfigureContainer方法中,将Knife,Actor注册到Autofac中ContainerBuilder。


public void ConfigureContainer(ContainerBuilder builder)
{
   builder.RegisterType<Knife>();
   builder.RegisterType<Actor>();
}

最后,增加HomeController,执行actor.Kill。


using Microsoft.AspNetCore.Mvc;
using System;

namespace Autofac.WebApi.Controllers
{
   [Route("[controller]")]
   [ApiController]
   public class HomeController : Controller
   {

private readonly Actor actor;
       public HomeController(Actor actor)
       {
           this.actor = actor ?? throw new ArgumentNullException(nameof(actor));
       }

[HttpGet]
       public string Get()
       {
           return actor.Kill();
       }
   }
}

启动调试,让我们来看看输出结果:


小明用刀杀怪

来源:https://www.cnblogs.com/zcqiand/p/14257650.html

标签:.NET,IoC,Autofac,框架
0
投稿

猜你喜欢

  • 成为一个顶级设计师的第二准则

    2008-04-01 09:41:00
  • ubuntu 18.04搭建python环境(pycharm+anaconda)

    2023-09-23 20:01:56
  • FF和IE之间7个JavaScript的差异[译]

    2009-05-04 18:19:00
  • python3 pillow生成简单验证码图片的示例

    2022-08-16 23:17:05
  • Python解决爬虫程序卡死问题

    2021-04-02 15:34:32
  • 如何使用索引提高查询速度

    2024-01-15 02:14:15
  • python绘制评估优化算法性能的测试函数

    2022-10-18 20:13:20
  • mysq启动失败问题及场景分析

    2024-01-13 22:01:12
  • python设计微型小说网站(基于Django+Bootstrap框架)

    2023-03-15 01:54:18
  • python并发编程多进程 模拟抢票实现过程

    2022-03-07 11:53:05
  • C语言中操作sqlserver数据库案例教程

    2024-01-24 17:47:32
  • 使用javascript将时间转换成今天,昨天,前天等格式

    2024-04-10 10:42:20
  • Python OpenCV之常用滤波器使用详解

    2023-02-07 22:18:25
  • 关于分页

    2011-07-01 12:39:03
  • Python读取文件内容的三种常用方式及效率比较

    2023-08-29 23:46:00
  • Python判断一个文件夹内哪些文件是图片的实例

    2023-08-18 01:22:44
  • CI框架中zip类应用示例

    2024-05-11 09:53:18
  • Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)

    2023-01-19 17:02:19
  • Python3利用Qt5实现简易的五子棋游戏

    2022-03-31 20:39:12
  • 网站的视觉路径和版式设计

    2008-04-15 14:35:00
  • asp之家 网络编程 m.aspxhome.com