2016-04-26 93 views
1

我想將我的C#程序的平臺無關邏輯分成共享項目。現在我想隱藏我的平臺特定項目中的存儲庫,服務類等。我可以使用什麼訪問修飾符? internal似乎不起作用,因爲它們被編譯成相同的可執行文件(我認爲),我不想用InternalsVisibleToAttribute來標記我所有的類。僅對共享項目可見的類?

有沒有辦法讓我的共享項目中的類對特定於平臺的代碼不可見?

回答

0

不,在C#中沒有這樣的功能。如果你考慮用InternalsVisibleToAttribute這個選項來標記每一個其他項目,那麼這樣做會有效。

如果可能,您可以將其他文件(存儲庫,服務文件)拆分爲另一個程序集,該程序集不包含在共享項目中。

1

只有一個地方您需要知道真實您嘗試實例的類型 - 平臺提供者。其他人應該只使用平臺不變的接口。

所有特定於平臺的實現都可以是私有的或內部的,只需要確保提供者具有訪問權限即可。您的應用程序將使用特定於平臺的提供程序來獲取特定於平臺的實例,而只使用平臺不變的接口。至於「被編譯成單個可執行文件」,這並不重要。很可能你完全關心編譯時檢查,不管最終的可執行文件是如何打包的,它仍然存在。對部分信任環境中的反射有一些限制,但到那時您不應該在意 - 您只是爲了編譯檢查而不是運行時安全。