我有第三方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。
我有第三方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。
所以,如果我正確地理解你,你想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)
這不是我所需要的。程序員不應該從A引用,但「感覺」幾乎可以做到。如果A更改,則X不必更改。 –
@GerhardSchmitt - 我認爲你誤讀了圖表和/或答案。程序員只需要引用B(或X取決於你在做什麼)。這部分工作就像普通的舊n層一樣。 B.DLL項目引用X,後者又引用第三方DLL。通過X中使用的適配器模式隱藏了B.DLL中的更改... –
但A中的所有更改都會在X中進行更改。如果sb將新類添加到A. –
你的意思是:A1.dll & A2.dll被定義在同類型名稱相同的命名空間,並且當您想要在X.dll中引用A1 & A2並使用這兩種類型之一時遇到問題?
爲了解決這個問題,你可以使用「extern別名」。這就是C#一個相當未知的功能:
的DLL你蟻(右鍵點擊組件的參考 - >屬性)添加外部別名
,然後在頂部您cs文件,只是把:
extern alias myAlias;
using okType = myAlias::DuplicateNamespace.DuplciateType;
,並在代碼中使用它:
var my = new okType();
個
PS:我的答案可能是不相關的,如果我誤解你了:)
謝謝,但事實並非如此。 –
我們可能需要更多的細節,也許一些特定的代碼對此置評,這不是告訴我們一個很大的 –
@Daniel我已經加入。 –