2016-05-02 70 views
1

解釋: 我有一個巨大的項目,建立在一個堅實的框架,根據一些條件(簡單地說,我們可以說它是一個真/假布爾),必須連接到數據庫的函數的工作方式不同。簡單來說,當它訪問數據庫時,它可以作爲Web服務或直接的mysql連接訪問。如何根據當前項目構建調用另一個依賴項的函數的依賴項?

現在我開始創建一個Xamarin項目(android),我想導入這個框架,但是,Xamarin不支持mysql ...雖然框架可以調用web服務來獲取mysql數據, mysql代碼在那裏的事實阻止了我的xamarin項目的構建。我甚至不能使用「#if」,因爲仍然存在對mysql dll的引用。我將如何去分裂我的類的dll文件,以便這個android項目不會加載mysql dll,只是調用Web服務的函數的一部分?功能看起來像 例子:

public static void InsertStuff(object stuff, bool useDirectMysql) 
{ 
    if (useDirectMysql)//I would like that this part only appears/works if its not the xamarin project, however, i can't use #if as the framework dll still has a reference to the mysql dll 
    { 
     //MySqlConnection connection = new MySqlConnection.... 
     //insert stuff 
    } 
    else 
    { 
     //Insert stuff with a web service function.. (compatible with xamarin) 
    } 
} 

回答

0

茲德拉夫科提供一個很好的解決辦法

不過,我完成了我想要的東西通過逐字編譯器評論性質,職能,對象和引用的每一個使用或引用(「使用...」)該框架。因此,雖然它引用了項目引用部分中的.dll文件,但Visual Studio似乎不編譯/嵌入那些未使用的dll。

我最終的解決辦法是:

1 - 創建2種生成配置,一個用於xamarin項目的框架,另一個用於我正常的Windows程序和框架。

2-評論一切與移動xamarin不兼容(但仍保持該項目的引用)

3-創建像一個編譯器的變量。當我想編譯我的xamarin項目時,我選擇了剛剛允許框架和xamarin的構建配置,將A放入我的框架dll中並編譯。

4-Change configuration and remote A當建立正常的c#/ C++/etc程序時。

一切都在同一VS解決方案。

+0

不,@ZdravkoDanev提供了正確的方法來做到這一點......你的答案*是一種解決方法:-) – Jcl

+0

@Jcl不,我不是。他是面向對象框架的答案,而我的大多數框架只有靜態方法。我不能做接口,不能。我確實有一些對象可以移動到另一個類中,但是,其80%的靜態類和方法使用引用。 – Zananok

1

實現平臺特定功能的模式是這樣的:

  • 在有一個方法InsertStuff共享項目創建的接口。

  • 使用DI注入依賴關係。

  • 相應地在每個平臺項目中實現接口。

相關問題