2012-02-17 44 views
1

我有一個程序集,其中包含我的Business Objects的基礎對象,然後是基於數據庫模式自動生成並填充類的另一個程序集。後一個程序集中的類都從前一個類中繼承而來。我可以避免引用從現有引用繼承的程序集嗎?

我的想法是,我可以從其他項目中引用生成的程序集,和「不」與底座組裝對象從而隱藏了一些實施細節以及使用這些對象禁止人。

不幸的是,我意識到,除非我引用它,以及我不能使用任何內置到基礎功能。所以我的問題是:無論如何,如果沒有,那麼是否有設計模式可以解決我應該使用的問題?

回答

1

如果你真的不想基類暴露給其他人(認爲的可擴展性),那麼你應該將基地轉移到同一裝配爲一體的混凝土。

如果您仍然需要組件分開,你仍然可以使基地內,然後設置InternalVisiblesToAttribute基類組件:

(在AssemblyInfo.cs中)

using System.Runtime.CompilerServices; 

[assembly:InternalsVisibleTo("ConcreteClassAssembly")] 
+1

不是一個完美的答案,但可能會盡可能接近我會得到。謝謝。 – 2012-02-17 03:13:57

+0

請讓我知道,如果你想或聽到更好的! – 2012-02-17 03:15:01

3

問題聽起來稍微向後。你正在隱藏你的數據層的業務/領域層?一般來說,這將是另一種方式。

無論哪種方式。這個問題聽起來像是你有:

  1. 大會一

    class Bar 
    
  2. 組件B

    class Foo : Bar 
    

組裝體C必須引用A和B使用美孚。

接下來的設計原則是支持組合繼承

不是富從酒吧繼承,美孚可能包含酒吧的一個實例,並揭露什麼方法做有意義的富。這都假設Foo實際上並不是Bar的專門版本。

+1

我不知道你是否正確理解,也許我沒有清楚地溝通。但問題不在於程序集C必須引用A和B才能使用Foo,問題是程序集C必須在使用Foo時引用A和B才能獲得Bar的功能。 – 2012-02-17 03:01:39

+0

此外,A將是數據訪問層,B將是域層。那麼,從技術上講,我的代碼現在並不是100%真實的,但總的來說就是這樣。如果可能的話,我寧願能夠引用B而不必引用A.你讓它聽起來像我的意思,但其他方式雖然... – 2012-02-17 03:08:21

+1

@BrandonMoore我想我可能一直困惑的措辭。然而在上面的例子中,組件C必須知道Foo和Bar都使用Foo。要不引用程序集A,Foo不能從程序集A中的類繼承。 – Jacob 2012-02-17 03:12:29

相關問題