2013-05-27 119 views
1

我在c#中開發用戶庫時遇到了一個令人困惑的問題,其中我創建了兩個類,實現了API作爲分離插件調用的接口...訪問單身屬性(WPF綁定)

(這意味着,編譯後的API檢測2個插件雖然他們是來自同一個項目)

我想要做的是使這兩個插件之間的通信。準確地說,我想從一個插件轉移一個對象(它不是一個副本),但是我失敗了!

我試圖讓其中一個插件Singleton從另一個插件到達它,但由於API需要一個公共構造函數,我不得不模仿singleton工作,並且實際上我已經到達插件的實例,但我能夠達到它的屬性...

讓我圖式化,通過簡化代碼:

讓我們說這是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 
    } 
} 

一個非常重要的指示,並可能產生問題的一個CT的對象是:

AF綁定到WPF控件...

希望我清楚地傳達了我的問題,你將能夠幫助我,因爲我卡住了!

回答

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(依賴注入),如團結,Ninject,等框架,會爲您提供一個良好的平臺,當你開發模塊化的代碼上工作

+0

謝謝爲你的答案,但我只是沒有訪問的API類和接口...我不能修改接口IPlugin – DjTrilogic

+0

你不必..它的只是在那裏,所以你可以輕鬆地編譯代碼。您只需訪問A類和B類的代碼即可 –