0

我为我的一个程序创建了自己的插件架构。

基本上 Plugin 是我所有插件的基类,并说我有 PluginA : Plugin 和 PluginB : Plugin 之类的插件。

public class Plugin 
{
    private static Plugin _instance;
    public static Plugin Instance { get { return Plugin._instance; } }
}

现在像往常一样,我的每个插件都有其他东西,比如表单和其他类。从这些类中,我想访问当前的插​​件实例,例如;

Plugin.Instance.Settings()

如果我确实在插件 ctor 中分​​配 _instance 字段,例如;

public Plugin(GlobalSettings gs, PluginSettings ps)
{
    Plugin._instance=this;
}

然后对于每个加载的插件,实例被覆盖,我得到奇怪的结果,比如 PluginB.Instance 返回一个 PluginA 的实例。

我知道单例似乎不是这样做的正确方法,但我无法提供另一种解决方案。也许 multiton 可以解决这个问题,但我不希望我的插件作者去

Plugin.Instance["PluginB"] 

似乎无关紧要的所有时间。

谢谢你的帮助。

4

2 回答 2

0

删除static关键字并保持 aList<Plugin>循环遍历它们。

于 2010-11-12T14:58:28.717 回答
0

正如建议的那样,您应该将它们存储在某种列表中,可能在托管应用程序中,也可能在库中。

您已经有了对当前插件的引用,使用 'this' 关键字,只需通过构造函数或方法将 this 传递给您的其他类:

喜欢

public class MyPlugin :Plugin
{
    private MyClass myClass;

    public MyPlugin()
    {
         this.myClass = new MyClass(this);  
         this.myClass.DoSomething();
    }
    public void Something()
    {
         //Called back into from MyClass

    }
}
public class Myclass
{
     public Plugin OwnerPlugin {get;internal set;}
     public MyClass(Plugin ownerPlugin)
     {
           this.OwnerPlugin = ownerPlugin;
     }
     public void DoSomething()
     {
          //do something with ownerplugin
          this.OwnerPlugin.Something();
     } 
}
于 2010-11-12T15:39:58.543 回答