在.网络核心控制台程序中使用依赖注入的案例

  介绍

小编给大家分享一下在。网络核心控制台程序中使用依赖注入的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强>背景介绍

依赖注入:又称依赖注入,简称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

在.网络核心控制台程序中使用依赖注入的案例