ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.NET Core Console控制台项目中使用DI依赖注入(ConfigureServices)

2022-07-28 18:34:26  阅读:227  来源: 互联网

标签:Core Console ConfigureServices Extensions Logging services using Microsoft


本文主要介绍.NET Core(C#) Console项目中,实现DI依赖注入的方法步骤,及实现和ASP.NET Core项目一样使用ConfigureServices()方法配置服务,以及相关实现的示例代码。

1、.NET Core Console项目安装引用Nuget包

1)使用Nuget管理控制台

集成到项目中的最简单方法是使用NuGet。您可以通过打开包管理器控制台(PM)并键入以下语句来安装依赖:

Install-Package Microsoft.Extensions.Configuration.EnvironmentVariables
Install-Package Microsoft.Extensions.Configuration.Json
Install-Package Microsoft.Extensions.DependencyInjection
Install-Package Microsoft.Extensions.Logging.Console
Install-Package Microsoft.Extensions.Logging.Debug
Install-Package Microsoft.Extensions.Options

2)使用Nuget图形管理器

使用Nuget的界面的管理器分别搜索:

"Microsoft.Extensions.Configuration.EnvironmentVariables"

"Microsoft.Extensions.Configuration.Json"

"Microsoft.Extensions.DependencyInjection"

"Microsoft.Extensions.Logging.Console"

"Microsoft.Extensions.Logging.Debug"

"Microsoft.Extensions.Options"

=> 然后找到点击"安装"

3)使用.NET CLI命令安装

> dotnet add TodoApi.csproj package Microsoft.Extensions.Configuration.EnvironmentVariables
> dotnet add TodoApi.csproj package Microsoft.Extensions.Configuration.Json
> dotnet add TodoApi.csproj package Microsoft.Extensions.DependencyInjection
> dotnet add TodoApi.csproj package Microsoft.Extensions.Logging.Console
> dotnet add TodoApi.csproj package Microsoft.Extensions.Logging.Debug
> dotnet add TodoApi.csproj package Microsoft.Extensions.Options

相关文档:VS(Visual Studio)中Nuget的使用

2、添加修改.NET Core Console项目

1) 修改Program.cs文件

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System.IO;
using System.Threading.Tasks;
internal class Program
{
    public static async Task Main(string[] args)
    {
        // 创建ServiceCollection
        var services = new ServiceCollection();
        ConfigureServices(services);
        // 创建ServiceProvider
        var serviceProvider = services.BuildServiceProvider();
        // app程序运行入口
        await serviceProvider.GetService<App>().Run(args);
    }
    private static void ConfigureServices(IServiceCollection services)
    {
        // 配置日志
        services.AddLogging(builder =>
        {
            builder.AddConsole();
            builder.AddDebug();
        });
        // 创建 config
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false)
            .AddEnvironmentVariables()
            .Build();
        services.Configure<AppSettings>(configuration.GetSection("App"));
        // 添加 services:
        // services.AddTransient<IMyRespository, MyConcreteRepository>();
        // 添加 app
        services.AddTransient<App>();
    }
}

2)添加App类

using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
using System.Threading.Tasks;
public class App
{
    private readonly ILogger<App> _logger;
    private readonly AppSettings _appSettings;
    public App(IOptions<AppSettings> appSettings, ILogger<App> logger)
    {
        _logger = logger ?? throw new ArgumentNullException(nameof(logger));
        _appSettings = appSettings?.Value ?? throw new ArgumentNullException(nameof(appSettings));
    }
    public async Task Run(string[] args)
    {
        _logger.LogInformation("Starting...");
        Console.WriteLine("Hello cjavapy!");
        Console.WriteLine(_appSettings.Name);
        _logger.LogInformation("Finished!");
        await Task.CompletedTask;
    }
}

鸣谢:https://www.cjavapy.com/article/735/
https://www.cjavapy.com/

标签:Core,Console,ConfigureServices,Extensions,Logging,services,using,Microsoft
来源: https://www.cnblogs.com/yakniu/p/16529730.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有