2.8 神奇的 Inject
特别赞助2.8 神奇的 Inject特别注意所有 .AddInject****() 方法不能同时注册,只能取其一。
2.8.1 Inject 设计
Inject [ɪnˈdʒekt] 意思是 注入,注射 的意思,在这里意为使用最小的侵入式对应用进行机能改造。
Inject() 方法是 Furion 框架提供的最小侵入式的方法,可以让任何 ASP.NET Core Web 后端项目瞬间支持所有 Furion 框架特性。
2.8.2 Inject 方法有哪些
Inject():在 Program.cs 中注册
AddInject():在 Startup.cs 的 ConfigureServices 中注册
AddInjectBase():在 Startup.cs 的 ConfigureServices 中注册
AddInjectWithUnifyResult()/ AddInjectWithUnifyResult
AddInjectMini():支持 Minimal API
UseInject():在 Startup.cs 的 Configure 中注册
UseInjectBase():在 Startup.cs 的 Configure 中注册
2.8.3 在 Program.cs 中使用
2.8.3.1 Inject() 方法
Inject() 是在启动程序 Program.cs 中使用的,集成 Furion 框架唯一方法,如:
Furion.Web.Entry\Program.csusing 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
.Inject() 方法提供了一个可配置的选项 InjectOptions,可以通过该配置配置框架初始化的一些配置,如:
.Inject((builder, options) =>{ options.AssemblyName = "Furion"; // 配置外部程序集名称 options.AutoRegisterBackgroundService = true; // 是否自动注册 BackgroundService options.ConfigurationScanDirectories("目录1", "目录2", ...); // 配置配置文件扫描目录 options.IgnoreConfigurationFiles("文件1", "文件2", ...); // 配置忽略配置文件 // 配置配置对象 options.ConfigureAppConfiguration((context, config) => { }); // 配置配置对象(Web) options.ConfigureWebAppConfiguration((context, config) => { }); // 配置 ConfigureServices options.ConfigureServices((context, services) => { }); // 配置 ConfigureServices(Web) options.ConfigureWebServices((context, services) => { });});
2.8.4 Startup.ConfigureServices 使用
2.8.4.1 AddInject() 方法
AddInject() 方法是在 Startup.cs 的 ConfigureServices 中提供最基础功能的注册。
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.8.4.2 AddInjectBase() 方法
AddInjectBase() 方法是在 Startup.cs 的 ConfigureServices 中提供最基础功能的注册。
AddInjectBase() 包含以下基础功能注册:
services.AddDataValidation() .AddFriendlyException();
使用同上 AddInject()。
2.8.4.3 AddInjectMini() 方法
版本说明以下内容仅限 Furion 3.7.6 + 版本使用。
支持 .NET6 最新的 Minimal API 模式:
builder.Services.AddInjectMini();
2.8.4.4 AddInjectWithUnifyResult() 方法
AddInjectWithUnifyResult() 方法实际上等同于:
services.AddInject([swaggerGen]) .AddUnifyResult();
使用同上 AddInject()。
2.8.5 Startup.Configure 使用
2.8.5.1 UseInject() 方法
UseInject() 方法是在 Startup.cs 的 Configure 中提供最基础功能的注册。
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.8.5.2 UseInjectBase() 方法
UseInjectBase() 方法是在 Startup.cs 的 Configure 中提供最基础功能的注册。
UseInjectBase() 实际上是个空方法,为了规范化代码特意建立的。
使用同上 UseInject()。
2.8.6 配置 Inject() 默认注册服务
所有 .Inject 方法都可以传入委托,通过委托可以进一步去配置默认行为。如:
.AddInject(options =>{ options.ConfigureDataValidation(vail => { vail.GlobalEnabled = false; }); // ....});
2.8.7 反馈与建议
与我们交流给 Furion 提 Issue。