Dans mon application C# j'ai un objet avec par exemple. propriétés Color
et Size
, et son peuplé à partir de valeurs db.Comment obtenir une référence à une instance d'un objet à partir d'une classe créée dynamique
J'ai une application concepteur qui permet à un utilisateur d'ajouter C#/code VB (une classe entière avec des méthodes spécifiques) qui peuvent ou ne peuvent pas utiliser/modifier les valeurs de propriétés de l'objet
Lorsque l'application exécute la classe sera créée (codeprovider) en mémoire à partir d'une chaîne créée par l'application designer, et une méthode spécifique appelée (réflexion) à l'exécution
Comment autoriser la méthode du code dynamique à référencer mon objet (non statique et rempli à partir de données spécifiques de l'utilisateur) de sorte que si l'utilisateur a ajouté le code pour, par exemple:
if(TheObject.Color == "Blue")
TheObject.Width="150";
Je peux l'obtenir pour travailler si je passe l'objet à une méthode dans la classe dynamique en tant que paramètre d'entrée:
....
ocResults = oCodeProvider,CompileAssemblyFromSource(oCParams, userCode);
oAssy = oCResults.CompiledAssembly;
oExecInstance = oAssy.CreateInstance("userClass");
oType = oExecInstance.GetType();
oType.GetMethod("OnLoad", new Type[] { typeof(myObj) });
mais ne peux pas savoir où mettre l'objet afin que le code dynamique peut référencer (le code dynamique sera généré et exécuté pour chaque utilisateur, mais il doit référencer l'objet créé pour sa session.
Le code de l'utilisateur devrait être facile à écrire et ne pas avoir à obtenir une référence d'un pour par exemple. Dictionary<String,Object>
statique (référencé via le code utilisateur AppDic["UserName"].Color
), puis supprimez-le à nouveau du dictionnaire lors de l'exécution du code dynamique.
Le code utilisateur doit simplement être: TheObject.Color
(comme une méthode statique puisque le code utilisateur n'aura pas besoin de créer une instance, le code créant le code dynamique a déjà rempli les valeurs de la propriété. changer/lire);
Quelqu'un peut-il aider?
Veuillez mettre en forme le code correctement. Aussi, quelle langue demandez-vous? – Robert
Mise à jour de la question – DeWet
'TheObject' damn! J'ai classe avec ce nom. – Andrey