我在这里遇到了一个难题,我甚至不确定它是否可能。
我正在开发一个基于插件的应用程序,其中所有插件都可以访问(读/写)主机应用程序上的共享配置。有更简单的方法来实现我提出的问题,但由于这是一个非工作相关的项目,我可以自由地玩:)
假设我们Plugin_A
继承了PluginBase
抽象类。抽象类公开了一个IConfiguration Config
属性,插件可以访问该属性以写入此共享配置。主机在加载插件时正确设置IConfiguration Config
,以限制特定插件将访问的可用配置。
我想做的是尝试使用C#4.0中的Dynamic关键字无缝编写配置类。
在伪C#代码中这就是我想要实现的目标
public class Plugin_A: PluginBase
{
public void DoSomethingWithConfig()
{
ShowAMessageBox(Config.SomeMessage);
Config.HasShownMessage = true;
}
}
现在 - 在这个例子中,我不想实际定义.SomeMessage
和.HasShownMessage
,而是让它们成为动态的,并在被调用时返回。
这似乎是一种延伸,但这是否可能呢?
答案 0 :(得分:3)
我认为您不想实现IDynamicObject接口,我建议您从DynamicObject继承Config。至少在您的示例中,您将要覆盖TryGetMember和TrySetMember。如果要动态调用方法,则需要TryInvokeMember。实现整个界面要困难得多。
因此,您的配置类将需要继承DynamicObject并实现IConfiguration。然后,您可以将该字段声明为动态项目或IConfiguration对象,并在您想要使用其动态行为之前将它们动态化。