小编给大家分享一下在。网络核心控制台程序中使用依赖注入的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>背景介绍强>
依赖注入:又称依赖注入,简称DI。在以前的开发方式中,层与层之间,类与类之间都是通过新的一个对方的实例进行相互调用,这样在开发过程中有一个好处,可以清晰的知道在使用哪个具体的实现。随着软件体积越来越庞大,逻辑越来越复杂,当需要更换实现方式,或者依赖第三方系统的某些接口时,这种相互之间持有具体实现的方式不再合适。为了应对这种情况,就要采用契约式编程:相互之间依赖于规定好的契约(接口),不依赖于具体的实现。这样带来的好处是相互之间的依赖变得非常简单,又称松耦合。至于契约和具体实现的映射关系,则会通过配置的方式在程序启动时由运行时确定下来。这就会用DI到。
依赖注入(依赖注入),是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度。在。网络核心MVC中
我们可以在启动。cs文件的ConfigureService方法中使用服务容器IServiceCollection注册接口及其实现类的映射。
例如,当我们需要访问Http上下文时,我们需要配置IHttpContextAccessor接口及其实现类HttpContextAccessor
, public void ConfigureServices (IServiceCollection 服务) ,{ ,services.AddMvc () .SetCompatibilityVersion (CompatibilityVersion.Version_2_1); ,services.AddSingleton(); 以前,}> 那么当我们编写一个。网络核心控制台程序的时候,我们该如何使用依赖注入呢?
<强>使用内置依赖注入强>
在。网络核心中,内置依赖注入模块使用的程序集是<代码> Microsoft.Extensions.DependencyInjection> 代码。
所以如果希望在控制台程序中使用内置依赖注入,我们首先需要使用NUGET添加对<代码> Microsoft.Extensions。DependencyInjection 代码>程序集的引用。
PM>, Install-Package Microsoft.Extensions.DependencyInjection这里为了说明如何使用。网络核心内置的依赖注入模块,我们创建以下2个服务接口。
, public interface IFooService ,{ ,void 难道(int 数量); ,} public interface IBarService ,{ ,void DoSomeRealWork (); 以前,}>然后我们针对这2个服务接口,添加2个对应的实现类
, public class BarService : IBarService ,{ ,private readonly  IFooService _fooService; ,public BarService (IFooService fooService) ,{ 时间=_fooService 才能;fooService; ,} ,public void  DoSomeRealWork () ,{ for 才能;(int 小姐:=,0;,小姐:& lt;, 10;,我+ +) {才能 _fooService.DoThing才能(我); ,,} ,} ,} ,public class FooService : IFooService ,{ ,private readonly  ILogger(); ,} ,public void 难道(int 数字) ,{ _logger.LogInformation才能($“Doing 从而thing {号码}“); ,} 以前,}> <强>代码解释强>
<李>
BarService类构造函数依赖了一个IFooService接口的实现
李> <李>FooService类构造函数依赖一个ILoggerFactory接口的实现
李> <李>FooService中,我们输出了一个信息级别的日志
李>在以上实现类代码中,我们使用了。网络核心内置的日志模块,所以我们还需要使用NUGET添加对应的程序集Microsoft.Extensions.Logging。控制台
PM>, Install-Package Microsoft.Extensions.Logging.Console最后我们来修改程序。cs,代码如下
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; ,public class 程序 ,{ ,public static  void Main (string [], args) ,{//才能setup our  DI var 才能;serviceProvider =, new ServiceCollection () .AddLogging才能() .AddSingleton<才能;IFooService, FooService> () .AddSingleton<才能;IBarService, BarService> () .BuildServiceProvider才能();//才能configure console 日志记录 serviceProvider才能 .GetService<才能;ILoggerFactory> () .AddConsole才能(LogLevel.Debug); var 才能;logger =, serviceProvider.GetService在.网络核心控制台程序中使用依赖注入的案例