⭐️ .NET 要在国内真正发展起来,必须得有一些追逐梦想的人在做着不计付出的事情,而我希望自己能贡献一份微薄之力。 ⭐️
Skip to main content

2.4 神奇的 Inject

2.4.1 Inject 设计

Inject [ɪnˈdʒekt] 意思是 注入,注射 的意思,在这里意为使用最小的侵入式对应用进行机能改造。

Inject() 方法是 Furion 框架提供的最小侵入式的方法,可以让任何 ASP.NET Core Web 后端项目瞬间支持所有 Furion 框架特性。

2.4.2 Inject 方法有哪些

  • Inject():在 Program.cs 中注册
  • AddInject():在 Startup.csConfigureServices 中注册
  • AddInjectBase():在 Startup.csConfigureServices 中注册
  • AddInjectWithUnifyResult()/ AddInjectWithUnifyResult<T>():在 Startup.csConfigureServices 中注册
  • AddInjectMini():支持 Minimal API
  • UseInject():在 Startup.csConfigure 中注册
  • UseInjectBase():在 Startup.csConfigure 中注册

2.4.3 在 Program.cs 中使用

2.4.3.1 Inject() 方法

Inject() 是在启动程序 Program.cs 中使用的,集成 Furion 框架唯一方法,如:

Furion.Web.Entry\Program.cs
using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting;namespace Furion.Web.Entry{    public class Program    {        public static void Main(string[] args)        {            CreateHostBuilder(args).Build().Run();        }        public static IHostBuilder CreateHostBuilder(string[] args)        {            return Host.CreateDefaultBuilder(args)                .ConfigureWebHostDefaults(webBuilder =>                {                    webBuilder.Inject()                              .UseStartup<Startup>();                });        }    }}

2.4.4 Startup.ConfigureServices 使用

2.4.4.1 AddInject() 方法

AddInject() 方法是在 Startup.csConfigureServices 中提供最基础功能的注册。

AddInject() 包含以下基础功能注册:

services.AddSpecificationDocuments([options])        .AddDynamicApiControllers()        .AddDataValidation()        .AddFriendlyException();

使用如下:

namespace Furion.Web.Entry{    public class Startup    {        public void ConfigureServices(IServiceCollection services)        {            services.AddInject();   // 支持直接注册(和下面代码二选一,不能同时注册两次)            services.AddControllers()                    .AddInject();   // 支持链式注册(和上面代码二选一,不能同时注册两次)        }        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)        {            // 其他代码        }    }}

2.4.4.2 AddInjectBase() 方法

AddInjectBase() 方法是在 Startup.csConfigureServices 中提供最基础功能的注册。

AddInjectBase() 包含以下基础功能注册:

services.AddDataValidation()        .AddFriendlyException();

使用同上 AddInject()

2.4.4.3 AddInjectMini() 方法

版本说明

以下内容仅限 Furion 3.7.6 + 版本使用。

支持 .NET6 最新的 Minimal API 模式:

builder.Services.AddInjectMini();

2.4.4.4 AddInjectWithUnifyResult() 方法

AddInjectWithUnifyResult() 方法实际上等同于:

services.AddInject([swaggerGen])        .AddUnifyResult();

使用同上 AddInject()

特别注意

所有 .AddInject****() 方法不能同时注册,只能取其一。

2.4.5 Startup.Configure 使用

2.4.5.1 UseInject() 方法

UseInject() 方法是在 Startup.csConfigure 中提供最基础功能的注册。

UseInject() 包含以下基础功能注册:

app.UseSpecificationDocuments();

使用如下:

namespace Furion.Web.Entry{    public class Startup    {        public void ConfigureServices(IServiceCollection services)        {            // 其他代码        }        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)        {            app.UseInject();    // 包含最小 Swagger 注册        }    }}

2.4.5.2 UseInjectBase() 方法

UseInjectBase() 方法是在 Startup.csConfigure 中提供最基础功能的注册。

UseInjectBase() 实际上是个空方法,为了规范化代码特意建立的。

使用同上 UseInject()

2.4.6 配置 Inject() 默认注册服务

所有 .Inject 方法都可以传入委托,通过委托可以进一步去配置默认行为。如:

.AddInject(options =>{    options.ConfigureDataValidation(vail =>    {        vail.GlobalEnabled = false;    });    // ....});

2.4.7 反馈与建议

与我们交流

给 Furion 提 Issue