【发布时间】:2023-03-21 03:15:01
【问题描述】:
我之前并没有真正使用过依赖注入,但它似乎很适合我现在正在构建的 .Net Core 项目。它是一个容器化的非 ASP 服务(本质上是一个控制台应用程序),其配置由如下所示的 JSON 文件驱动:
{
"Routes": [
{
"Name": "What's in a name?",
"Description": "This is a description",
"Source": {
"Path": "SomePath/Read"
},
"Destination": {
"Path": "SomePath/Write"
}
}
]
}
Routes 可以有 n 指定的路由数量。每个都应该解析为Route 强类型对象,Source 和Destination 部分应分别解析为强类型FileLocation 对象,无需手动映射到JSON 字段名称。下面的代码实现了这一点(使用顶级 Routes 类来包含列表):
new ConfigurationBuilder()
.AddJsonFile(FileRoutesConfigFile, optional: false, reloadOnChange: true)
.Build()
.Get<Routes>()
但是,我希望配置类受益于 Microsoft DependencyInjection 框架以获取应用程序服务(例如,FileLocation 的类似内容):
public class FileLocation {
public string Path { get; set; }
private IAppConfiguration AppConfiguration { get; }
public FileLocation(IAppConfiguration appConfiguration) {
AppConfiguration = appConfiguration;
}
}
我看不到这样做的方法(当没有无参数构造函数时,它会完全失败)。我是否需要使用不同的 DI 框架,或者有没有办法使用可用的第一方框架来实现这一点?
【问题讨论】:
-
配置类是模型,不要把DI放在上面。将它们注入服务并在那里放置您需要的任何依赖项。回答实际问题:我认为您不能使用 Microsoft.Extensions.DependencyInjection 做到这一点。
标签: c# json .net-core dependency-injection inversion-of-control