【问题标题】:Modularity Shared services Interfaces architecture and Interfaceversiondescription模块化共享服务接口架构和接口版本描述
【发布时间】:2017-04-28 19:11:06
【问题描述】:

我在 WPF 应用程序中使用 Prism Unity,但在理解共享服务的正确实现方面存在一些问题。

我创建了一个 DLL 项目并添加了一个接口。

接口(DLL):

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

接口实现(类)在模块内部完成,模块在主机应用程序启动时加载,当然,我在主机应用程序中添加了我的接口 DLL 作为引用。

模块A:

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

我在我的主机应用程序的引导程序中注册了 IMyservice。我在 ModuleB Project 中添加了接口 DLL 作为参考,然后我可以通过从统一容器解析来使用 Myservice 的实例。

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

问题:

  1. 此架构是否有效,或者我必须将接口的实现放入我的 interface.dll 中?我在模块中实现了接口,因为我只想与其他人共享我的 interface.dll 而不是实现。我将实现放在 moduleA 中,因为我想让它模块化。

  2. 如果这个架构是有效的设计,那么我想知道,我如何能够在运行时处理我的 interface.dll 的版本描述,而不是 moduleA 的版本描述。

    李>

【问题讨论】:

  • 您要版本化实现还是接口?目前,您对实现进行版本控制,AdvancedServcie 可能会为Version 返回V2.00,但它们都实现了相同的接口。看看我对这个相关问题的回答:stackoverflow.com/questions/40827080/…
  • 我想要接口和实现的版本,但相互独立。

标签: unity-container prism


【解决方案1】:

我想要接口和实现的版本,但彼此独立

那么您就在正确的轨道上,只需添加新版本的界面即可。因为,你知道,另一个接口就是另一个接口,不管一个接口是否从另一个接口演变而来......你最终会得到像IMyServiceIMyService2IMyAdvancedService 等等这样的东西以及消费者的服务必须查看其中哪一个具有实现,然后选择要与之交互的实现之一。

无论如何,无论是 Unity 还是 Prism 中都没有任何魔法可以让你摆脱这些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多