2017-04-27 72 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中都没有什么魔法能够剥夺你的这种魔力。