2017-04-27 68 views
0

我在WPF應用程序中使用Prism Unity,並且我有一些問題需要理解共享服務的正確實現。模塊化共享服務接口體系結構和Interfaceversiondescription

我創建了一個DLL項目並添加了一個接口。

接口(DLL):

public interface IMyservice 
{ 
     string Version { get; } 
     int DoSomething(int x, int y); 
} 

接口的實現(類)在模塊內完成,該模塊被加載於主機應用程序啓動的,當然,我說我的DLL接口作爲參考我的主機應用程序。

ModuleA:

public class Myservice : IMyservice 
{ 
    public string Version => "V1.00"; 
    public int DoSomething(int x, int y) 
     { 
      return x + y; 
     } 
} 

我註冊在我的主機應用程序的引導程序的IMyservice。我添加到ModuleB項目接口DLL作爲參考,然後我能夠通過從統一容器解析使用Myservice的實例。

container.Resolve<MyService>.DoSomething(1,1); 

問題:

  1. 這是架構有效或我必須把接口的實現到我interface.dll?我在模塊中實現了接口,因爲我只想與其他人共享我的interface.dll而不是實現。我把這個實現放在moduleA中,因爲我想要它的模塊化。

  2. 如果這個架構是有效的設計,那麼我想知道,我如何能夠在運行時處理我的interface.dll的版本描述,而不是moduleA的版本描述。

+0

是否要對_implementation_或_interface_進行版本化?目前,您對版本進行了版本升級,「AdvancedServcie」可能會返回'V2.00'作爲'版本',但它們都實現相同的接口。看看我對這個相關問題的答案:https://stackoverflow.com/questions/40827080/c-sharp-prism-for-wpf-common-modules-libraries-upgrading-strategy/40827662#40827662 – Haukinger

+0

我想版本都是接口和實現,但彼此獨立。 – Shazter

回答

0

我想這兩個版本的接口和實現,但相互獨立的

然後你在正確的軌道上,只需添加接口的新版本。因爲,你知道,另一個界面是另一個界面,不管是否有人演化出另一個界面......你最終會得到類似IMyService,IMyService2,IMyAdvancedService等等,服務的消費者將不得不看看他們中哪一個具有實現,然後選擇其中一個實現進行交互。

無論如何,在Unity和Prism中都沒有什麼魔法能夠剝奪你的這種魔力。