【问题标题】:What do you call the method DI uses to populate a model?您将 DI 用于填充模型的方法称为什么?
【发布时间】:2021-09-27 13:21:27
【问题描述】:

IHost 的实现(如通用主机)会进行依赖注入。您使用这样的辅助方法填充服务集合

  IConfigurationSection section;
  section = config.GetSection("SectionName");
  services.Configure<SectionModel>(section);

Configure 辅助方法中,一些魔术创建了 SectionModel 的实例并从 IConfigurationSection 对象填充它。

这叫什么?我需要在没有 DI 的情况下执行此操作,虽然我确信翻阅 Microsoft 源代码可能会得到答案,但我可以使用执行此操作的方法名称更快地翻阅。

他们很可能只是使用反射,但我不希望自己实现这一点,并且可能存在不同的行为。

【问题讨论】:

  • “这叫什么?”模型绑定?反序列化?它与 DI 关系不大。 DI 是关于注入依赖项,但这是关于加载数据。
  • @Steven 它与 DI 的关系只是 DI 做了它,我想知道 DI 调用什么,以便在没有 DI 的情况下我可以有完全相同的行为。 DI 有一切与它有关,因为它是评估兼容性的上下文。
  • 啊,我想我明白你的意思了。当您在问题中提到“DI”时,您指的是“.NET Core 配置系统”。该配置系统包括依赖注入功能。正是这个配置系统加载配置文件,模型将它们绑定到 POCO 类。我将配置系统和 DI 容器视为两个不同的东西。事实上,我将 DI 容器(即库)和 DI(即一组原则、模式和实践)视为两个独立的东西。这可能引起了我们的误解。

标签: .net-core dependency-injection


【解决方案1】:

根据documentation,这称为Bind,并出现在IConfigurationSection

首先创建配置部分和模型对象,然后像这样调用Bind

var sectionModel = new SectionModel();
config.GetSection("SectionName").Bind(sectionModel);

@Nkosi cmets

同样可以使用

var sectionModel = config.GetSection("SectionName").Get&lt;SectionModel&gt;();

这是使用泛型的相同解决方案的更优雅的表达方式。

【讨论】:

  • 同样可以使用SectionModel sectionModel = config.GetSection("SectionName").Get&lt;SectionModel&gt;(); reference
  • 那比我的好。写一个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
相关资源
最近更新 更多