You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用BindingResolver的Update方法时是否会自动创建嵌套属性对象?

关于MORYX框架中BindingResolverFactory的属性绑定问题

我在自定义模块配置中使用BindingResolverFactory实现属性绑定,绑定的对象完全由给定的绑定规则生成,所有绑定属性都设置为字符串'example'。

需要创建的对象类型定义如下:

public class Foo {
  public string FooString { get; set; }
  public Bar FooBar { get; set; }
}

public class Bar {
  public string BarString { get; set; }
}

在ModuleController的Start()方法中,我为配置的两个绑定(FooString和FooBar.BarString)创建了IBindingResolver实例:

// Somewhere 
var resolverFactory = new BindingResolverFactory();
var fooStringResolver = resolverFactory.Create("FooString");
var barStringResolver = resolverFactory.Create("FooBar.BarString");

现在我创建了Foo类型的实例:

var foo = new Foo();
fooStringResolver.Update(foo, "example");
barStringResolver.Update(foo, "example"); // 此代码能否生效?

请问:

  1. 我能否让resolver自动处理Bar对象是否已创建,还是需要手动提前创建?
  2. 若没有绑定指向FooBar属性,我需要它保持null,否则就得先创建再删除,这会很繁琐,有没有办法避免?

答案

1. barStringResolver.Update(foo, "example")的生效情况

默认情况下这段代码不会生效,因为foo.FooBar初始为null,原生的BindingResolver不会自动创建嵌套对象实例。

2. 自动处理嵌套对象创建的方案

你可以通过配置BindingResolverFactory的ObjectFactory扩展点,实现自动创建未初始化的嵌套对象:

var resolverFactory = new BindingResolverFactory();
// 配置自动创建嵌套对象的逻辑
resolverFactory.ObjectFactory = (type) => Activator.CreateInstance(type);

var barStringResolver = resolverFactory.Create("FooBar.BarString");
var foo = new Foo();
barStringResolver.Update(foo, "example");
// 此时foo.FooBar会被自动实例化,且FooBar.BarString会被设置为"example"

3. 无绑定时保持FooBar为null的实现

上述配置只会在有绑定指向嵌套属性(比如FooBar.BarString)时,才会自动创建Bar实例。如果没有任何绑定涉及FooBar,foo.FooBar会保持初始的null状态,完全不需要提前创建再删除的操作。

内容的提问来源于stack exchange,提问作者1nf0rmagician

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:42:38