4

我正在尝试为 c# 中基于约定的配置绑定器编写一个不错的消费者 API。ConfigManager.GetSection(...)返回一个对象,所以我想返回一个动态对象,当它转换为所需的类型时会调用一个映射器。

C#4+ 中是否有任何方法可以创建一个动态类,该类可以在应用显式强制转换后处理调用?

例如

MyConfig config = (MyConfig)ConfigurationManager.GetSection("some/section");

在这种情况下,来自 ConfigurationManager 的动态对象将被演员调用以执行一些配置魔术(我已经解决了那个问题)

4

2 回答 2

2

是的,DynamicObject有一个可覆盖的TryConvert。当DynamicObject子类被强制转换(或为赋值隐式转换)时,将调用 TryConvert,您可以binder在返回结果之前从参数中获取有关调用的动态详细信息。

binder.Type 属性提供对象必须转换为的类型。例如,对于 C# 中的语句 (String)sampleObject(Visual Basic 中的 CType(sampleObject, Type)),其中 sampleObject 是派生自 DynamicObject 类的类的实例,binder.Type 返回 String 类型。binder.Explicit 属性提供有关发生的转换类型的信息。显式转换返回 true,隐式转换返回 false。

于 2013-05-20T20:22:11.103 回答
1

有很多项目可以满足您的需求。

例如,查看AutoConfig

于 2013-05-20T20:42:12.477 回答