访问单例属性(WPF绑定)

时间:2013-05-27 23:42:12

标签: c# wpf properties singleton

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

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

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

我试图制作其中一个插件Singleton并从另一个插件到达它,但由于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
     }
}

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

A.F绑定到WPF控件...

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

1 个答案:

答案 0 :(得分: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等。框架,它将为您提供开发模块化代码时的良好平台