如何在非AspNetCore项目中使用依赖注入

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步,可以实现在任意类型项目中使用依赖注入。