1

我在 C# 中开发用户库时遇到了一个令人困惑的问题,我在其中创建了两个类,它们实现了一个由 API 作为单独插件调用的接口......

(这意味着在编译后 API 会检测到 2 个插件,尽管它们来自同一个项目)

我想要做的是启用这两个插件之间的通信。准确地说,我想将一个对象(它是引用而不是副本)从一个插件转移到另一个......但我失败了!

我试图制作其中一个插件单例并从另一个插件中访问它,但是由于 API 需要一个公共构造函数,我被迫模仿单例工作,并且实际上我已经到达了插件的实例,但是我能够达到其属性...

让我通过简化的代码来概括一下:

假设这是A类(模仿单例的)

Class A:IPlugin
{
    private static volatile A _instance;
    public static A Instance 
    { 
        get { return _instance; } 
    }
    public A()
    {
        if (_instance == null) _instance = this; // as i'm sure it's called once
    }

    public Foo F{get;set} // THIS IS INITIALIZED SOMEWHERE IN THAT PLUGIN'S CONTEXT
}

这是试图从 A 中提取对象的类

Class B:IPlugin
{
     FindFoo()
     {
          Foo Fb = A.Instance.F; // THAT IS ALWAYS NULL
     }
}

一个非常重要的迹象和可能造成问题的迹象是:

AF 绑定到 WPF 控件...

我希望我已经清楚地传达了我的问题,并且您将能够帮助我,因为我被卡住了!

4

1 回答 1

0

试试下面的;

public interface IPlugin {
   string Foo { get; set;}
}

public class A : IPlugin {

   private static A _inslance { get; set;}

    public static A Instance {
        get {
            if (_inslance == null){
                _inslance = new A();
            }
            return _inslance;
        }
   }


   public string Foo { get; set;}
}

public class B : IPlugin {

   public string GetMeFooOfA {
        get {
            return A.Instance.Foo;
        }
   }

   public string Foo { get; set;}
}

void Main()
{
    A.Instance.Foo = "Test 123";

    var b = new B();

    Console.WriteLine(b.GetMeFooOfA);
}

您可能想查看一个 DI(依赖注入),例如 Unity、Ninject 等。当您开发模块化代码时,该框架将为您提供一个很好的工作平台

于 2013-05-28T01:07:49.900 回答