01—
有小伙伴儿问:在AspNetCore项目中写的组件,都是基于依赖注入的,这些组件如何在非AspNetCore项目中复用呢?
要回答这个问题,首先要清楚AspNetCore中的依赖注入,是如何实现的?
默认情况下AspNetCore的依赖注入是由Microsoft.Extensions.DependencyInjection程序集实现的。.
在AspNetCore项目中,通过Startup类的ConfigureServices(IServiceCollection services)方法,对服务类进行注册。
通过ServiceProvider类的GetService()方法,从依赖注入容器中,获取服务类的实例。
02—
在非AspNetCore项目中使用依赖注入,共3步:
第一步:通过nuget包管理器引入程序集:Microsoft.Extensions.DependencyInjection
/// <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步,可以实现在任意类型项目中使用依赖注入。