“软件是由组件递归组合而成的”
@图片故事:这个植物是紫菀,2022年9月10日中秋节,在北京老龙窝徒步,途中遭遇马蜂袭击,狼狈不堪,幸得队友碾碎紫菀叶,敷在伤口上,以缓解疼痛。 @摄影师:刘先生
01
—
有小伙伴儿问:在AspNetCore项目中写的组件,都是基于依赖注入的,这些组件如何在非AspNetCore项目中复用呢?
要回答这个问题,首先要清楚AspNetCore中的依赖注入,是如何实现的?
默认情况下AspNetCore的依赖注入是由Microsoft.Extensions.DependencyInjection程序集实现的。
在AspNetCore项目中,通过Startup类的ConfigureServices(IServiceCollection services)方法,对服务类进行注册。
通过ServiceProvider类的GetService()方法,从依赖注入容器中,获取服务类的实例。
所以,不管是控制台项目,单元测试项目,还是客户端项目,按照这个逻辑,都可以使用依赖注入。
02
—
在非AspNetCore项目中使用依赖注入,共3步:
第一步:通过nuget包管理器引入程序集:Microsoft.Extensions.DependencyInjection
第二步:仿照Startup中的ConfigureServices方法,注册所需服务类。
基础代码如下:
/// <summary>
/// 注册服务类
/// </summary>
/// <returns></returns>
public static ServiceCollection ConfigureServices()
{
ServiceCollection services = new ServiceCollection();
//与AspNetCore中Startup一样,注册服务类即可
services.AddScoped<ICostService, CostService>();
return services;
}
第三步:构建ServiceProvider,获取服务实例
基础代码如下:
/// <summary>
/// 使用服务类
/// </summary>
/// <returns></returns>
public static void Work(ServiceCollection services)
{
//创建ServiceProvider
using(var serviceProvider = services.BuildServiceProvider())
{
//获取服务实例
var costService = serviceProvider.GetService<ICostService>();
//完成业务操作costService.Do();
}
}
简单3步,可以实现在任意类型项目中使用依赖注入。
喜欢内容的朋友可以点赞,转发,关注
技术群:添加小编微信并备注进群
小编微信:mm1552923
公众号:dotNet编程大全