2014-03-12 40 views
2

我有一個C#接口,IFoo,它可以在多個項目中由多方執行。我想要做的是版本接口,以便我可以確定實現是針對哪種版本的接口開發的。如何版本C#接口?

是否有這樣做的首選/傳統方式?我曾考慮將只讀InterfaceVersion屬性放入接口規範中,但可以由實現者定義,而不是由我作爲接口的設計者定義,所以不是我想要的。

+1

我將版本庫的內部和從那裏去。 – Botonomous

+2

public interface IFoo_v2 {}? – BlackBear

+3

此評論可能不完全有幫助,但創建不同版本的界面可能不是一個好主意。接口是有用的,因爲它們確保基於相同接口的類之間的完全兼容。在通常情況下,一旦接口在實現中使用,接口不會再被更改。 –

回答

3

這是一個非常複雜話題,當你考慮各種決定的全面影響。我已經開始了以下主題中記錄此過程:

Assembly Versioning in Extensible Applications

本文將重點介紹Visual Studio 2010和更新,它本身就是與迄今爲止發佈的多個版本的可擴展應用。現有的擴展機制是MEF,但它所施加的規則和限制仍然適用於其他擴展機制。

本文檔是一個正在進行中的工作。建議和/或問題可以在issue tracker上報告。

+0

感謝您的參考。一個很好的閱讀(到目前爲止) – ken4z

1

通常,一個接口不會對接口進行版本化,因爲它被視爲合同(並且合同應該強制執行而不會中斷)。通常會使用新功能(IFoo2)創建一個新界面,然後需要參與新合同的類將實現該界面。

public class Foo : IFoo, IFoo2 
{ 
    // Implementation goes here 
} 
+0

我得到了整個「一個接口是契約」的東西,並且正是因爲我希望實現被綁定到我的規範,但我不希望出現多個接口實際上是相同的事情的情況,也許只是在一年的時間裏有一些新的物業。 –

+0

您可以將IFoo2定義爲要求IFoo1 –

0

,但可以由實施者作爲設計師的界面 來定義,而不是由我,所以是不是我想要的

這段話包含了答案,你自己的問題。你想要的是隻能由你(設計者)定義的東西,所以它必須是你提供的組件中包含的東西。組件包含類型,因此這個東西必須是一個類型。

很顯然,在你發貨後你不能改變任何接口(這會破壞所有的客戶端代碼),所以剩下的唯一選擇是定義一個新的接口。然後,實施者可以通過選擇實施它來選擇新版本。