2017-04-27 2 views
0

J'utilise Prism Unity dans une application WPF et j'ai quelques problèmes pour comprendre l'implémentation correcte d'un service partagé. J'ai créé un projet DLL et ajouté une interface.Modularité Services partagés Interfaces architecture et Interfaceversiondescription

Interface (DLL):

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

L'implémentation de l'interface (classe) est fait à l'intérieur d'un module et le module est chargé au démarrage de l'application hôte, bien sûr, j'ai ajouté ma DLL d'interface comme référence dans mon application hôte.

ModuleA:

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

Je me suis inscrit le IMyService dans le Bootstrapper de mon application hôte. J'ai ajouté à la DLL de l'interface ModuleB Project comme référence, puis je suis capable d'utiliser l'instance de Myservice en résolvant à partir du conteneur unity.

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

Questions:

  1. Est-ce l'architecture valide ou je dois mettre la mise en œuvre de l'interface dans mon interface.dll? J'ai fait l'implémentation de l'interface dans le module car je voudrais partager uniquement avec d'autres mon interface.dll et non l'implémentation. J'ai mis la mise en œuvre dans le moduleA parce que je voudrais l'avoir modulaire. Si cette architecture est une conception valide, alors je voudrais savoir comment je peux gérer la description de la version de mon interface.dll et non la description de la version de moduleA pendant l'exécution.

+0

Voulez-vous mettre à jour le _implementation_ ou le _interface_? Actuellement, vous versionnez l'implémentation, 'AdvancedServcie'might retourner' V2.00' pour 'Version', mais ils implémentent tous les deux la même interface. Jetez un oeil à ma réponse à cette question connexe: https://stackoverflow.com/questions/40827080/c-sharp-prism-for-wpf-common-modules-libraries-upgrading-strategy/40827662#40827662 – Haukinger

+0

Je voudrais version à la fois l'interface et la mise en œuvre, mais indépendants les uns des autres. – Shazter

Répondre

0

je voudrais la version à la fois l'interface et la mise en œuvre, mais indépendante de l'autre

Ensuite, vous êtes sur la bonne voie, il suffit d'ajouter de nouvelles versions de l'interface. Parce que, vous le savez, une autre interface est une autre interface, peu importe si elle a évolué ou non ... vous finirez avec quelque chose comme IMyService, IMyService2, IMyAdvancedService et ainsi de suite et les consommateurs du service devront Regardez lequel d'entre eux a des implémentations, puis sélectionnez l'une des implémentations avec lesquelles interagir.

De toute façon, il n'y a pas de magie non plus dans Unity ni dans Prism qui vous diverge de ça.