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){//创建ServiceProviderusing(var serviceProvider = services.BuildServiceProvider()){//获取服务实例var costService = serviceProvider.GetService<ICostService>();//完成业务操作costService.Do();}}
简单3步,可以实现在任意类型项目中使用依赖注入。