none
C# Práce s třídami z různých jmenných prostorů

    Obecná diskuse

  • Dobrý den,  
       Existuje jmenný prostor (namespace) Company.Service01, který obsahuje třídy a rozhraní.
       Existuje jmenný prostor (namespace) Company.Service02, který obsahuje třídy a rozhraní.

       Oba prostory mají stejnou strukutru, obsahují stejné třídy a rozhraní.

       Potřebuji nějakým způsobem zajistit to, abych mohl pracovat z třídou tohoto
       jmeného prostoru v závislosti na vstupním parametru programu.

       Je to možné, existuje na to nějaká technika?
       Cílem je to, abych nemusel opakovat stejný kód n-krát podle počtu jmenných prostorů.
      
       Příklad:
       soubor01.cs
       namespace Company.Service0X
       {
           public interface Eso9Port {...}
           public partial class FaultInfo {...}
           public interface Eso9PortChannel {...}
           public partial class Eso9PortClient {...}
       }

       soubor02.cs
       namespace Company
       {  
           class Program
           {
               static void Main(string[] args)
               {
                   if (args[0] == "01")
                   {
                       MultiService m = new MultiService();
                       m.CreateOrder();
                   }
                   else if (args[0] == "02")
                   {
                       MultiService m = new MultiService();
                       m.CreateOrder();
                   }
                   else if (args[0] == "03")
                   {
                       MultiService m = new MultiService();
                       m.CreateOrder();
                   }
               }
           }

           public class MultiService
           {
               public void CreateOrder()
               {
                   // Prace s instanci tridy Company.Service0X.Eso9PortClient v zavisloti na parametru v tride Program    
                   Company.Service0X.Eso9PortClient x = new Company.Service0X.Eso9PortClient();
                   string xx = x.orders
                   ...                                    
               }
           }
       }

       Předem Děkuji za odpověď.


    Lada vyvojar
    21. června 2011 6:39

Všechny reakce

  • Existujici sluzby by zrejme mely implementovat jednotne rozhrani (interface) a hlavni kod pak psat proti tomuto rozhrani. Pak vytvorit "tovarnu", ktera bude vracet objekt služby podle parametru.
    ---
    Hruby kod:
    ---
    IMyService myService = Factory.GetService("01");
    if (myService != null) myService.CreateOrder();
    
    ---
    static IMySerivce GetService(string index)
    {
     switch(index)
     {
     case "01": return Company.Service01.Eso9PortClient();
     case "02": return Company.Service02.Eso9PortClient();
     ...
     }
    }

    Parametrizovat primo namespace by melo jit pomoci reflexe: System.Activator.CreateInstance("...assembly...", "Company.Service" + index + ".Eso9PortClient").
    Reflexni reseni spotrebuje nekolik ms navic a nekomu se muze zdat nepekne.



    20. července 2011 13:00