В моем приложении C# у меня есть объект с, например. свойства Color
и Size
, и его заполнены из значений db.Как получить ссылку на экземпляр объекта из динамически созданного класса
Тогда у меня есть дизайнер приложение, которое позволяет пользователю добавлять C#/VB код (целый класс конкретных методов), которые могут или не могут использовать значение/изменения от свойств объекта
Когда приложение бежит класс будет создан (codeprovider) в памяти из строки, созданной конструкторским приложением, и специальный метод, называемый (отражение) во время выполнения
Как разрешить метод динамического кода ссылаться на мой объект (нестатический и заполненный из пользовательские данные), так что если пользователь добавил код, например:
if(TheObject.Color == "Blue")
TheObject.Width="150";
я могу заставить его работать, если я передать объект в метод в динамическом классе качестве входного параметра:
....
ocResults = oCodeProvider,CompileAssemblyFromSource(oCParams, userCode);
oAssy = oCResults.CompiledAssembly;
oExecInstance = oAssy.CreateInstance("userClass");
oType = oExecInstance.GetType();
oType.GetMethod("OnLoad", new Type[] { typeof(myObj) });
, но не могу понять, куда поместить объект так, что динамический код может ссылаться на него (динамический код будет генерироваться и выполняться для каждого пользователя, но они должны ссылаться на объект, созданный для их сеанса.
Код пользователя должен быть легко написан и не нужно получать ссылку от a, например. static Dictionary<String,Object>
(с помощью кода пользователя AppDic["UserName"].Color
), а затем удалите его из словаря при выполнении динамического кода.
Код пользователя должен быть только: TheObject.Color
(как статический метод, так как пользователю не нужно будет создавать экземпляр, код, создающий динамический код, уже заполнял значения свойств. Пользователь должен иметь возможность изменение/чтение);
Может ли кто-нибудь помочь?
Пожалуйста, правильно отформатируйте код. Кроме того, на каком языке вы спрашиваете? – Robert
Обновленный вопрос – DeWet
'TheObject' черт! У меня есть класс с этим именем. – Andrey