最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

在.NET Core控制台程序中如何使用依赖注入详解

来源:动视网 责编:小采 时间:2020-11-27 22:34:45
文档

在.NET Core控制台程序中如何使用依赖注入详解

在.NET Core控制台程序中如何使用依赖注入详解:背景介绍 Dependency Injection:又称依赖注入,简称DI。在以前的开发方式中,层与层之间、类与类之间都是通过new一个对方的实例进行相互调用,这样在开发过程中有一个好处,可以清晰的知道在使用哪个具体的实现。随着软件体积越来越庞大,逻辑越来越复杂,
推荐度:
导读在.NET Core控制台程序中如何使用依赖注入详解:背景介绍 Dependency Injection:又称依赖注入,简称DI。在以前的开发方式中,层与层之间、类与类之间都是通过new一个对方的实例进行相互调用,这样在开发过程中有一个好处,可以清晰的知道在使用哪个具体的实现。随着软件体积越来越庞大,逻辑越来越复杂,


使用第三方依赖注入

除了使用内置的依赖注入模块,我们还可以直接使用一些第三方的依赖注入框架,例如Autofac, StructureMap。

这里我们来使用StructureMap来替换当前的内置的依赖注入框架。

首先我们需要先添加程序集引用。

PM> Install-Package StructureMap.Microsoft.DependencyInjection

然后我们来修改Program.cs文件,代码如下

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using StructureMap;
using System;

namespace DIInConsoleApp
{
 class Program
 {
 static void Main(string[] args)
 {
 var services = new ServiceCollection().AddLogging();

 var container = new Container();
 container.Configure(config =>
 {
 config.Scan(_ =>
 {
 _.AssemblyContainingType(typeof(Program));
 _.WithDefaultConventions();
 });

 config.Populate(services);
 });

 var serviceProvider = container.GetInstance<IServiceProvider>();

 serviceProvider.GetService<ILoggerFactory>().AddConsole(LogLevel.Debug);

 var logger = serviceProvider.GetService<ILoggerFactory>().CreateLogger<Program>();
 logger.LogInformation("Start application.");

 var bar = serviceProvider.GetService<IBarService>();
 bar.DoSomeRealWork();

 logger.LogInformation("All done!");
 Console.Read();
 }
 }
}

代码解释

  • 这里我们实例化了一个StructureMap的服务容器Container, 并在其Configure方法中配置了接口类及其实现类的自动搜索。这里使用的是一种约定,接口类必须以字母“I”开头, 实现类的名字和接口类只相差一个字母“I”, 例IFooService, FooService, IBarService, BarService
  • 后续代码和前一个例子基本一样。虽然看起来代码多了很多,但是实际上这种使用约定的注入方式非常强力,可以省去很多手动配置的代码。
  • 最终效果

    运行程序,代码和之前的效果一样

    info: DIInConsoleApp.Program[0]
          Start application.
    info: DIInConsoleApp.FooService[0]
          Doing the thing 0
    info: DIInConsoleApp.FooService[0]
          Doing the thing 1
    info: DIInConsoleApp.FooService[0]
          Doing the thing 2
    info: DIInConsoleApp.FooService[0]
          Doing the thing 3
    info: DIInConsoleApp.FooService[0]
          Doing the thing 4
    info: DIInConsoleApp.FooService[0]
          Doing the thing 5
    info: DIInConsoleApp.FooService[0]
          Doing the thing 6
    info: DIInConsoleApp.FooService[0]
          Doing the thing 7
    info: DIInConsoleApp.FooService[0]
          Doing the thing 8
    info: DIInConsoleApp.FooService[0]
          Doing the thing 9
    info: DIInConsoleApp.Program[0]
          All done!

    本篇源代码 (本地下载)

    总结

    文档

    在.NET Core控制台程序中如何使用依赖注入详解

    在.NET Core控制台程序中如何使用依赖注入详解:背景介绍 Dependency Injection:又称依赖注入,简称DI。在以前的开发方式中,层与层之间、类与类之间都是通过new一个对方的实例进行相互调用,这样在开发过程中有一个好处,可以清晰的知道在使用哪个具体的实现。随着软件体积越来越庞大,逻辑越来越复杂,
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top