我正在尝试为c#中基于约定的配置绑定器编写一个不错的消费者API。 ConfigManager.GetSection(...)
返回一个对象,所以我想返回一个动态对象,当转换为所需类型时会调用一个映射器。
在C#4 +中是否有任何方法可以创建一个动态类,可以在应用显式强制转换后处理调用?
e.g。
MyConfig config = (MyConfig)ConfigurationManager.GetSection("some/section");
在这种情况下,来自ConfigurationManager的动态对象将由强制转换器调用以执行一些配置魔术(我已经解决了这一点)
答案 0 :(得分:2)
是的,DynamicObject
有一个可覆盖的TryConvert。当DynamicObject
子类被强制转换(或隐式转换为赋值)时,会调用TryConvert,并且在返回结果之前,您可以从binder
参数获取有关调用的动态详细信息。
binder.Type property提供对象必须转换的类型。对于 例如,对于C#中的语句(String)sampleObject (Visual Basic中的CType(sampleObject,Type)),其中sampleObject是 从DynamicObject类派生的类的实例, binder.Type返回String类型。 binder.Explicit属性 提供有关发生的转换类型的信息。它 对于显式转换返回true,对于隐式转换返回false 转换。
答案 1 :(得分:1)
有很多项目可以满足您的需求。
例如,查看AutoConfig。