2013-05-18 260 views
4

我正在尝试为c#中基于约定的配置联编程序编写一个很好的使用者API。 ConfigManager.GetSection(...)返回一个对象,所以我想返回一个动态对象,当转换为所需类型时调用一个映射器。将C#DynamicObject强制转换为任意类型

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

例如

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

在这种情况下,从ConfigurationManager中的动态物体将被执行一些配置魔法施法调用(我已经解决了该位)

回答

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。

+1

谢谢。我在询问之前(实现了DynamicObject的每个虚拟方法)并且刚刚看到异常被提出 - 我发现它们是第一次偶然异常,并且在TryConvert被调用之前我很愤怒。 –

1

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

例如查看AutoConfig

+0

谢谢 - 这个项目部分是快乐的,但它也会比AutoConfig做得更多 - 例如支持任意复杂的对象图,集合和自定义绑定器(和POCO) –

+0

如果您有兴趣,我完成了这个项目 - http://www.github.com/spadger/simple-config –

相关问题