代码之家  ›  专栏  ›  技术社区  ›  Yngve B-Nilsen

在运行时使用动态类/属性加载配置

  •  1
  • Yngve B-Nilsen  · 技术社区  · 14 年前

    我有一个难题,我甚至不确定这是否可能。

    我正在开发一个基于插件的应用程序,所有插件都可以访问(读/写)主机应用程序上的共享配置。有一些更简单的方法可以实现我提出的问题,但是由于这是一个与工作无关的项目,我可以自由地玩:)

    假设我们有 Plugin_A 它继承了 PluginBase 抽象类。抽象类公开 IConfiguration Config 属性,插件可以访问该属性以写入此共享配置。这个 配置配置配置 在加载插件时由主机正确设置,以限制特定插件将访问的可用配置。

    我想做的是尝试使用C 4.0中的动态关键字无缝地编写config类。

    在伪C代码中,我想实现以下目标

    public class Plugin_A: PluginBase
    {
       public void DoSomethingWithConfig()
       {
          ShowAMessageBox(Config.SomeMessage);
          Config.HasShownMessage = true;
       }
    }
    

    现在-在这个示例中,我不想实际定义 .SomeMessage .HasShownMessage 而是让它们是动态的,并在被调用时返回。

    这似乎是一种伸展,但这一切都有可能吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   marr75    14 年前

    我认为您不想实现IDynamicObject接口,我建议您改为让config继承自dynamicObject。至少对于您的示例,您需要重写TryGetMember和TrySetMember。如果要动态调用方法,则需要TryInvokEmber。实现整个接口要困难得多。

    因此,您的配置类需要继承DynamicObject并实现IConfiguration。然后,可以将字段声明为动态项或IConfiguration对象,并在希望使用它们的动态行为之前将它们强制转换为动态的。