.NET Core(C#)使用DI依赖注入通过构造函数传参的方法及示例代码

本文主要介绍.NET Core(C#) Console项目中,使用DI依赖注入的方式获取实例时,通过构造函数的传递参数的方法,以及相关的示例代码。

1、安装引用Nuget包

1)使用Nuget管理控制台

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

Install-Package Microsoft.Extensions.DependencyInjection
Install-Package Microsoft.Extensions.DependencyInjection.Abstractions

2)使用Nuget图形管理器

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

"Microsoft.Extensions.DependencyInjection"

"Microsoft.Extensions.DependencyInjection.Abstractions"

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

3)使用.NET CLI命令安装

> dotnet add TodoApi.csproj package Microsoft.Extensions.DependencyInjection
> dotnet add TodoApi.csproj package Microsoft.Extensions.DependencyInjection.Abstractionss

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

2、构造函数传递参数示例代码

using Microsoft.Extensions.DependencyInjection;
using System;
namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            var services = new ServiceCollection();
            services.AddTransient<HelloWorldService>();
            services.AddTransient(p => p.ResolveWith<DemoService>("Tseng", "Stackoverflow"));
            var provider = services.BuildServiceProvider();
            var demoService = provider.GetRequiredService<DemoService>();
            Console.WriteLine($"Output: {demoService.HelloWorld()}");
            Console.ReadKey();
        }
    }
    public class DemoService
    {
        private readonly HelloWorldService helloWorldService;
        private readonly string firstname;
        private readonly string lastname;
        public DemoService(HelloWorldService helloWorldService, string firstname, string lastname)
        {
            this.helloWorldService = helloWorldService ?? throw new ArgumentNullException(nameof(helloWorldService));
            this.firstname = firstname ?? throw new ArgumentNullException(nameof(firstname));
            this.lastname = lastname ?? throw new ArgumentNullException(nameof(lastname));
        }
        public string HelloWorld()
        {
            return this.helloWorldService.Hello(firstname, lastname);
        }
    }
    public class HelloWorldService
    {
        public HelloWorldService() { 
        }
        public string Hello(string name) => $"Hello {name}";
        public string Hello(string firstname, string lastname) => $"Hello {firstname} {lastname}";
    }
    // Just a helper method to shorten code registration code
    static class ServiceProviderExtensions
    {
        public static T ResolveWith<T>(this IServiceProvider provider, params object[] parameters) where T : class =>
            ActivatorUtilities.CreateInstance<T>(provider, parameters);
    }
}

相关文档:

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

.NET Core 2.0控制台程序(console)安装配置使用NLog的方法及示例代码

.NET Core(C#)运行控制台程序(console app)的命令方法

.NET Core(console)应用程序中发布创建独立可执行(.exe)文件

.NET Core 2.0 console(控制台)项目 Microsoft.Extensions.Logging NLog配置使用


推荐阅读
cjavapy编程之路首页