2010-04-30 3 views
1

Je travaille sur un programme qui charge dynamiquement (en exécution) les DLLs.
Pour un exemple: Microsoft.AnalysisServices.dll.Passe la valeur enum à la méthode qui est appelée par l'objet dynamique

Dans ce dll nous avons ce ENUM:

namespace Microsoft.AnalysisServices 
{ 
    [Flags] 
    public enum UpdateOptions 
    { 
     Default = 0, 
     ExpandFull = 1, 
     AlterDependents = 2, 
    } 
} 

et nous avons aussi ce class Cube:

namespace Microsoft.AnalysisServices 
{  
    public sealed class Cube : ... 
    { 
     public Cube(string name); 
     public Cube(string name, string id); 
.. 
.. 
.. 
    } 
} 

je charger dynamiquement cette dll et créer objet Cube. Que j'appelle une méthode Cube.Update(). Cette méthode déploie le serveur Cube to SQL Analysis. Mais si je veux appeler cette méthode avec les paramètres Cube.Update(UpdateOptions.ExpandFull) j'obtiens l'erreur, parce que la méthode n'obtient pas le paramètre approprié.

J'ai déjà essayé, mais ne fonctionne pas:

dynamic updateOptions = AssemblyLoader.LoadStaticAssembly("Microsoft.AnalysisServices", "Microsoft.AnalysisServices.UpdateOptions");//my class for loading assembly 
Array s = Enum.GetNames(updateOptions); 
dynamic myEnumValue = s.GetValue(1);//1 = ExpandFull 
dynamicCube.Update(myEnumValue);// == Cube.Update(UpdateOptions.ExpandFull) 

Je sais que l'erreur est dans le paramètre myEnumValue mais je ne sais pas comment obtenir dynamiquement le type ENUM de l'assemblage et le transmettre à la méthode. Est-ce que quelqu'un connaît la solution?

Merci beaucoup pour vos réponses et votre aide!

Répondre

0

Toutes les énumérations peuvent être traitées de la même manière que leur type de base. Dans ce cas, le type de base de UpdateOptions est int de sorte que vous pouvez simplement passer TheValue 1 dans dynamicCube.Update comme ceci:

dynamicCube.Update(1) 

Vous n'avez pas besoin de se soucier des bits de type ENUM dynamiques.

+0

J'ai essayé ceci, mais ne fonctionne pas. Même si j'ajoute refernece à l'assemblage et que j'essaie cela, j'obtiens une erreur: 'la méthode a des arguments invalides ' –

0

J'ai trouvé la solution. Le code est comme ceci:

dynamic assembly = AssemblyLoader.LoadStaticAssembly("Microsoft.AnalysisServices", Microsoft.AnalysisServices.UpdateOptions");
dynamic expandFull = (Enum)Enum.Parse(assembly, "ExpandFull", true);
dynamicCub.Update(expandFull);

et ça marche!

Cordialement,

Questions connexes