加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – 没有ASP.NET Core的.NET Core中的DI

发布时间:2020-12-14 05:02:19 所属栏目:百科 来源:网络整理
导读:我正在寻找使用.NET Core编写一个守护进程,它基本上就像一个chron作业,只是在某个时间间隔内编排API / DB调用.因此,它不需要公开任何Web路由,因此不需要ASP.NET Core. 但是,afaik ASP.NET Core是您可以获得所有可能需要的所有DI管道和基于环境的配置的良好St
我正在寻找使用.NET Core编写一个守护进程,它基本上就像一个chron作业,只是在某个时间间隔内编排API / DB调用.因此,它不需要公开任何Web路由,因此不需要ASP.NET Core.

但是,afaik ASP.NET Core是您可以获得所有可能需要的所有DI管道和基于环境的配置的良好Startup类的地方.

我看到它的方式,我有两个选择:

>放弃ASP.NET Core并自己连接DI框架.如果我走那条路,我该怎么做?
>仅为DI部分包含ASP.NET Core,但是如何在任何请求上下文之外生成“永远运行”的后台任务?我的理解是,DI框架非常假设有一些进入的请求来协调所有注入.

解决方法

您似乎提出了多个问题让我尝试逐一回答.

没有启动类的依赖注入.

这绝对是可能的.由于Startup类是WebHostBuilder包(包含Kestrel / webserver)的一部分. The Dependency injection is nuget package只是对此包的依赖,因此可以通过以下方式单独使用:

var services = new ServiceCollection();
services.AddTransient<IMyInterface,MyClass>();
var serviceProvider = services.BuildServiceProvider(); //ioc container
serviceProvider.GetService<IMyInterface>();

因此,在您的程序主(启动功能)中,您可以添加此代码,甚至可以使ServiceProvider Staticaly可用.

请注意,IHostingEnvironment也是kestrel包的一部分,不适合您,但有一些简单的解决方法.

注册

我不确定你是什么意思通过产生后台任务/永远运行.但是在dotnet中,您可以使用TaskCreationOptions.LongRunning生成任务,告诉调度程序您的任务将运行很长时间并且dotnet wel优化线程.您还可以在这些任务中使用serviceProvider.

DI的唯一缺点是你需要在应用程序启动时进行设置,并且在运行应用程序时无法添加新服务(实际上你可以添加服务然后重建serviceProvider,但使用另一个外部IOC容器更容易).如果您考虑运行某种类型的插件系统,其中依赖项将自动注册,那么您最好制作自己的工厂方法.

还要注意使用插件时,当它们作为dll加载时,它们无法卸载,所以如果你有理论上无限量的插件,每次添加新插件时你的内存都会慢慢增加.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读