2013-10-30 112 views
0

我有第三方A1.dll,A2.dll與類AClass。 我從我的B1和B2 dll中引用它,但我想用另一種方式: 我想使用A1使用A1 + A2和B1,B2使用X.dll。重要的是所有名稱空間和類都應該是在X和A1 + A2中相同。大會暴露其他類

編輯: X應該是我的副本A1,A2 - 我甚至可以使用X1,X2。然後,我可以使用A1,A2的一個許可證 - 用於X,而不是用於未來的所有exec & dll。

+3

我們可能需要更多的細節,也許一些特定的代碼對此置評,這不是告訴我們一個很大的 –

+0

@Daniel我已經加入。 –

回答

2

所以,如果我正確地理解你,你想X.DLL站在第三方DLL的。你可以通過Adapter pattern來實現。你想保留所有命名空間和類的事實是非常可怕的。這些碰撞會非常麻煩。您可能不得不求助於using aliasing directives以維持某種程度的理智。 (你爲什麼會做這個,如果你有B.DLL和X.DLL的控制?)

話雖這麼說這裏是爲不使用碰撞命名方案X.DLL適配器模式...

class Adapter: IAdapter//Adapter is a member of X.DLL 
{ 
    public AClass aClassMember = new AClass();//A.DLL or A2.DLL member 
    public void ExposeAClass() {}; 
} 

然後,您可以從B.DLL引用X.DLL。

class BClass 
    { 
     public IAdapter myAdapter = new Adapter();//Access X's adapter to expose A. Could take a step further with dependency injection... 
    } 

的依賴關係圖如下所示(給予或採取interfaces.dll)

enter image description here

+0

這不是我所需要的。程序員不應該從A引用,但「感覺」幾乎可以做到。如果A更改,則X不必更改。 –

+0

@GerhardSchmitt - 我認爲你誤讀了圖表和/或答案。程序員只需要引用B(或X取決於你在做什麼)。這部分工作就像普通的舊n層一樣。 B.DLL項目引用X,後者又引用第三方DLL。通過X中使用的適配器模式隱藏了B.DLL中的更改... –

+0

但A中的所有更改都會在X中進行更改。如果sb將新類添加到A. –

0

你的意思是:A1.dll & A2.dll被定義在同類型名稱相同的命名空間,並且當您想要在X.dll中引用A1 & A2並使用這兩種類型之一時遇到問題?

爲了解決這個問題,你可以使用「extern別名」。這就是C#一個相當未知的功能:

的DLL你蟻(右鍵點擊組件的參考 - >屬性)添加外部別名

extern alias

,然後在頂部您cs文件,只是把:

extern alias myAlias; 
using okType = myAlias::DuplicateNamespace.DuplciateType; 

,並在代碼中使用它:

var my = new okType(); 

PS:我的答案可能是不相關的,如果我誤解你了:)

+0

謝謝,但事實並非如此。 –