ASP.NET Core 依赖注入详细 |
|
前言:
一、控制反转说道依赖注入就不得不提控制反转(IoC) 。 二、好莱坞法则“不要给我们打电话,我们会给你打电话( 三、流程控制
通过上面这张图不难看出IoC在其中起到的作用 。 四、三种依赖注入方式1.构造器注入构造器注入就是在构造函数中借助参数将依赖的对象注入由他创建的对象当中 。平时基本都是使用其中的构造函数方式实现注入 。
public class A
{
public IB B { get; }
public A(IB b) => B = b;
}
ASP.NET Core 中的使用
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
2.属性注入通过标注
public class A
{
public IB B { get; set; }
[Injection]
public IC C { get; set; }
}
3.方法注入同样通过标注
public class A
{
public IB B { get; }
[Injection]
public Initialize(IB b) => B = b;
}
除了通过容器初始化服务过程中自动调用实现,我们还可以利用它实现另一种更加自由的方法注入,这种方式在
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApplication1 v1"));
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
五、生命周期AddSingleton的生命周期: 项目启动-项目关闭 相当于静态类 只会有一个 注意:由于 六、ASP.Net Core 中自带的注入
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IA, A>;
services.AddSingleton<IB, B>;
services.AddTransient<IC, C>;
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication1", Version = "v1" });
});
}
注意: 到此这篇关于ASP.NET Core 依赖注入详细的文章就介绍到这了,更多相关 ASP.NET Core 依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! |