如何在.Netcore控制台应用中使用依赖注入(1)

由于最近需要写一个控制台小工具(当然啦,是用.Net core实现,具体信息后边会有博客更新的),因为可能涉及的引用比较多,就想使用依赖注入来打消强依赖。
其实之前有一个项目已经写过类似的代码了,现在只是不想再去做重复劳动,所以写了一个类库来实现这个在控制台中使用依赖注入。只支持.Netcore 2.0+版本。
先上代码 DependencyInjection.InConsole

本篇文章主要介绍如何使用,以及她是如何减轻工作量的。

1、首先,安装Nuget包

Nuget package
可以使用如下命令安装:

Install-Package DependencyInjection.InConsole -Version 1.0.0-preview
// or
dotnet add package DependencyInjection.InConsole --version 1.0.0-preview
2、添加一个类,继承自 Injector 抽象类,并重载 Inject 方法,如下:
public class ExampleInjector : Injector
{
    public override void Inject()
    {
        services.AddTransient<Interface, Implication>();
    }
}
3、对于.net core 2.0或2.1,在 Main 方法第一行添加如下代码:
var provider = Startup.ConfigureServices();
// 如果你不需要provider,也可以这样
Startup.ConfigureServices();

对于.netcore 2.2,你可以选择使用Hooks,也就不需要在 Main 方法中添加上述的代码,如果需要使用 provider,可以用如下方式获取:

var provider = Singletons.Provider;

选择使用Hooks,就要添加一个名为 DOTNET_STARTUP_HOOKS 的环境变量,其值为 DependencyInjection.InConsole.dll 的路径,比如:C:\DependencyInjection.InConsole.dll
至此,你就可以在代码中使用注入的类型了。

关于 IConfiguration

IConfiguration 已经默认注入,并从 appsettings.json 读取配置,可以直接使用:

var configuration = provider.GetRequiredService<IConfiguration>();
Console.WriteLine(configuration["foo"]);

现在只支持使用json键值对方式读取配置。
还有一点需要牢记:如果在.netcore2.2中使用Hooks方式注入,就不要使用 Singletons.Provider,否则会抛出异常。
如果有任何问题或者想要实现的功能可以去Github提issue,pull request。?

转载于:https://www.cnblogs.com/weidaicheng/p/10297293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值