是否可以將接口注入到我無法更改的現有第三方類中?像擴展方法一樣,但是用於接口(以及它已經注入的類的實現)。接口注入
我喜歡選擇使用兩個類似的第三方庫之一,通過給兩個庫中類似的類使用相同的接口。所以我不必把那裏的課程轉換成我的課程。
是否可以將接口注入到我無法更改的現有第三方類中?像擴展方法一樣,但是用於接口(以及它已經注入的類的實現)。接口注入
我喜歡選擇使用兩個類似的第三方庫之一,通過給兩個庫中類似的類使用相同的接口。所以我不必把那裏的課程轉換成我的課程。
我並不完全理解注入接口的含義,但您可以使用Adapter模式來實現此目的。另請參閱:http://dofactory.com/Patterns/PatternAdapter.aspx
創建您自己的接口,然後創建您自己的實現接口的類,其中包含/包裝第三方類。
只要你在處理接口,爲什麼不直接把類包裝到自己的類中去實現接口呢?
你應該看看Decorator Pattern,它允許你通過構圖來擴展一個類。
例如 它實現了InterfaceA鑑於密封A類:
public interface InterfaceA
{
int A {get; set;}
}
public sealed Class A : InterfaceA
{
public int A {get;set;}
}
你可以擴展了InterfaceA,然後使用一個修飾的B類來封裝類A的一個實例,並提供額外的方法。
public interface MyExtendedInterfaceA : InterfaceA
{
int B {get;set}
}
public class B : MyExtendedInterfaceA
{
private InterfaceA _implementsA = new A();
public int A
{
get
{
return _implementsA.A;
}
set
{
_implementsA.A = value;
}
}
public int B {get; set;}
}
另外,裝飾C類可以添加一個全新的界面:
public interface InterfaceC
{
int MethodC();
}
public class C : InterfaceA, InterfaceC
{
private InterfaceA _implementsA = new A();
public int A
{
get
{
return _implementsA.A;
}
set
{
_implementsA.A = value;
}
}
public int MethodC()
{
return A * 10;
}
}
看起來你沒有仔細閱讀我的問題。如果A類是第三方庫類之一,我將無法添加InterfaceA。 – Martin 2009-09-11 11:24:38
看起來你錯誤地解釋了我的意思;我在概述A類結構,它可以在你自己的代碼或第三方庫中。無論哪種方式,它是密封的,你不能改變它。 B類和C類是您在自己的課程中編寫的代碼。 – 2009-09-11 11:27:24
我喜歡這一點。我後來在博客上發表了一段話:http://www.madprops.org/blog/imposing-interfaces-onto-classes-with-extension-methods/ – 2009-09-11 06:17:00
這真是令人遺憾的事情是,類在事後並不能適應接口,在Haskell中用類型和類型來完成。 – 2009-09-11 06:19:07