2010-07-19 39 views
14

我知道InternalVisibleTo屬性用於將具有內部訪問修飾符的類型和方法公開給指定的程序集。我只使用過這種方法將內部方法暴露給包含一組單元測試的單獨程序集。何時應該使用[assembly:InternalsVisibleTo()]?

我很努力地想到應該使用這種情況下的另一種情況。這個屬性是專門爲了幫助單元測試而引入的還是有其他原因?

回答

14

一種情況可能是您有組件間的邏輯分離(如內部數據對象和邏輯層)。您不想將這些類公開給您的用戶,但您仍然希望在自己的程序集中使用這些對象。

我認爲這不是一個很常見的情況,我很少在非單元測試環境中使用InternalsVisibleTo

+1

我同意。我只在單元測試場景中使用它,但是您描述的場景是合理的。 – Steven 2010-07-19 09:12:05

6

除了測試中,我曾經使用過的InternalsVisibleTo屬性唯一的其他情況下,創建序列化程序集的時候了。

除此之外,我從來沒有用過,也不需要它。

7

這種情況類似於Elisha's,但其目標是在Domain-driven design中強制正確使用您的域模型。

假設你有一個裝配MyProject.Core,其中包含所有的域模型。如果您不希望其他人直接創建域模型的實例,則可以使構造函數internal

另一個組件,叫做MyProject.Services,包含了專門創建有效的域對象域服務。這個大會將有一個參考MyProject.CoreInternalsVisibleTo屬性用於授予域服務程序集對internal構造函數的訪問權限。

MyProject.ServicesMyProject.Core的引用的另一個好處是它不允許域對象保留對域服務的任何引用,這被認爲是另一個好的DDD實踐。

注意:我從來沒有在實踐中應用過上述場景,所以在DDD級別上可能並不完全準確。但這是我能想到的InternalsVisibleTo的用法,那不是單元測試相關的。

相關問題