Question

Je suis le chargement d'un ensemble à l'exécution et je suis également en utilisant des génériques en fonction du type de montage. Pour obtenir le bon type, chaque DLL met en œuvre une usine que je pense être là qui instancie la classe avec le type générique correct.

            Type factoryType = assembly.GetType("MyCompany.ScenarioPlayer.PlayerFactory");
            MethodInfo method = factoryType.GetMethod("CreatePlayer", BindingFlags.Public | BindingFlags.Static);

            player = (IScenarioPlayer)method.Invoke(null, null);

Ce code échoue sur le method.Invoke quand je ne dispose pas des privilèges administratifs. Est-ce exact que tous les appels à MethodInfo.Invoke la façon dont je l'utiliser nécessite d'administration? Je suis descendu dans mon code DLL et il est même pas passé reçois cet appel dans l'usine.

edit: tour là-bas était une dépendance de la DLL cible qui n'a pas été pris en compte. Je aime l'idée de cadre proposé MEF cependant.

Était-ce utile?

La solution

Cela n'a rien à voir avec MethodInfo, mais plutôt ce que MethodInfo fait le plus probable. Vous pouvez tester ceci en appelant la méthode en question et voir si cela fonctionne dans un environnement non admin.

Autres conseils

En utilisant la réflexion, de la manière que vous l'utilisez, pour résoudre le problème de la création d'usines lors de l'exécution est une mauvaise idée. Non seulement vous pas éviter le couplage (vous avez une chaîne codée en dur faisant référence à un seul type), vous ouvrez un monde de mal. Aucun de ce genre de choses est fortement typée.

Je suggère regarder quelque chose comme si vous MEF êtes à la recherche de créer des composants connectables. Il résout déjà les problèmes auxquels vous êtes confronté et est-ce le fait d'une manière beaucoup plus agréable, plus rapide et plus maintenable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top