2015-02-06 26 views
1

我使用從組件B中的.NET 4.5.2和需要訪問一個ClassA的在組件A中定義,但要聲明ClassA的內部,以避免來自其它組件訪問它。我的組件類型的離散定義可見度如何?

我不想使用InternalsVisibleTo因爲我不希望所有的組件中的類型的內部露底向大會B.

彙總:我需要分散定義我的組件類型的可見性。那可能嗎?

編輯:StrongNameIdentityPermissionAttribute與我所需要的非常相似,但我不想讓這些類型公開,因爲我希望它們在編譯時也隱藏起來。

+4

您試圖這樣做的事實表明您的設計存在架構缺陷。爲什麼首先有兩個組件? – 2015-02-06 02:46:51

+0

@EricLippert完全不同意你的看法。這不是微不足道的解釋爲什麼我需要分離地訪問另一個程序集的類到一個程序集的類,但基本上與DDD分層體系結構有關,以及某些Domain * Reconstruction Factories需要從基礎結構層訪問而不是從應用層和一些*創建工廠*只需要從應用層訪問,而不是從基礎設施層訪問。這只是一個例子。 – 2015-02-06 02:58:07

回答

2

是否可以將A類自行移出新項目?然後,您可以引用項目B中的項目A,並且沒有其他項目/組件會看到它。

如果這是不可能的,那麼我同意埃裏克認爲設計看起來不正確。這將是就像這個標準的項目結構:

project Entity 
project Database 
project Server 
project UserInterface 

,但在你的情況你結塊說實體和數據庫一起。所以當UserInterface需要使用實體時,它也必須包含無用的數據庫代碼。

+0

如果你對我的設計有一個正確的看法,我已經向你解釋了更多關於它的信息,在這種情況下,這是一種無關緊要的話題。我只是想確保不存在我遇到的技術問題的解決方案,因爲我的設計。如果您瞭解DDD,您可以瞭解一些關於我的設計的知識:域定義構造函數和創建工廠都在不同的層(基礎結構和應用程序)中使用,因此域層需要將兩種類都暴露給不同類型的層。我不想發起關於我的設計的討論,那將是一個無關緊要的話題。 – 2015-02-06 15:36:41

+0

當然,但僅僅將物理域項目拆分爲Domain.Infrastructure和Domain.Application項目是不可能的?他們仍然會形成一個單一的域名層,但您可以通過這種方式控制可見性。 – LegendLength 2015-02-07 01:30:44

+0

當然,但是接下來我會在不同的程序集中拆分我的域圖層(具有維護中的所有成本),只是爲了解決「不能將某些程序集分散暴露給我的類型」的技術問題。我們已經以這種方式對事物進行了建模,並且以很多額外的程序集結束,這就是爲什麼我問這個問題,我沒有尋找建議來重新定義我的架構,或者如何使用微不足道的.NET概念來實現它,而是要解決那個具體的技術問題,我仍然非常感謝你的幫助。謝謝。 – 2015-02-07 02:45:50

相關問題