c# - 为 ASP.NET 核心和 .NET 核心 CLT 配置服务
问题描述
我想使用相同的代码并希望配置为 ASP.NET 核心和 .net 核心命令行工具设置 DI。
我了解如何使用 Startup.cs 为 ASP.NET 核心配置服务。我了解如何ServiceCollection
在命令行工具中构建一个服务收集和构造函数注入)。
我的 Web 和 CLT 项目可以使用相同的扩展方法来注册我的服务吗?Startup.ConfigureServices
会将ServiceCollection
它收到的 and 配置传递给我的扩展方法。我可以传递ServiceCollection
CLT 管理的 CLT,但它可以从appsettings.json
文件中获取相同类型的配置吗?
解决方案
在 CLT 中,我需要一些掘金:
Microsoft.Extensions.Cofiguration.Json
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting
private static ServiceCollection _services = new ServiceCollection();
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
//TODO: .SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
builder.Build();
IConfigurationBuilder configBuilder =
new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
ServiceProvider provider = ConfigureServices(_services, configBuilder.Build()).BuildServiceProvider(); //TODO: dispose
_repo = provider.GetService<IRepository>();
provider.Dispose();
我可能会将 CLT 的一个属性设置为提供者,但是我不确定如何确保它被处置。
推荐阅读
- c++ - 在 C++ 中声明 &ref=a 和 ref=&a 等变量之间的区别
- javascript - 未捕获的 ReferenceError:需要未定义(电子)
- javascript - firebase.auth().onAuthStateChanged 在 vuex 中刷新页面后为空
- flutter - 当我在手机上单击后退按钮时,底部选项卡导航器会出现
- javascript - 如何使用 JS 从 HTML 中删除特定标签?
- r - 如何在 R 中安排不同的数据帧(一个在另一个之下)而不关心匹配参数?
- regex - RegEx 检测具有特定属性的 JSON 对象属性
- python - 错误:没有名为“register.forms”的模块,使用crispy-forms django
- javascript - 获取嵌套对象内项目的绝对键
- discord.js - 如何让你的机器人在 discord 上发送多个直接嵌入的消息