private void FillContext(IEnumerable <IFileInfo> sources, ApplicationModelProviderContext context) { var reflector = new TypeReflectionEngine(); MachineInstance.Current.PrepareThread(_fw.Environment); foreach (var virtualPath in sources) { LoadedModule module; FileInfoCodeSource codeSrc; string typeName; if (virtualPath.IsDirectory) { var info = FindModule(virtualPath.Name, MODULE_FILENAME) ?? FindModule(virtualPath.Name, virtualPath.Name + ".os"); if (info == null) { continue; } codeSrc = new FileInfoCodeSource(info); typeName = virtualPath.Name; } else { codeSrc = new FileInfoCodeSource(virtualPath); typeName = System.IO.Path.GetFileNameWithoutExtension(virtualPath.Name); } module = CompileControllerModule(codeSrc); var reflectedType = reflector.Reflect <ScriptedController>(module, typeName); var attrList = MapAnnotationsToAttributes(_classAttribResolver.Attributes); var cm = new ControllerModel(typeof(ScriptedController).GetTypeInfo(), attrList.AsReadOnly()); cm.ControllerName = reflectedType.Name; var recompileInfo = new DynamicCompilationInfo() { Module = module, CodeSource = codeSrc, Tag = cm }; cm.Properties.Add("CompilationInfo", recompileInfo); cm.Properties.Add("type", reflectedType); ChangeToken.OnChange(() => CreateWatchToken(codeSrc), RecompileController, recompileInfo); FillActions(cm, reflectedType); FillFilters(cm); context.Result.Controllers.Add(cm); } }
private void FillContext(IEnumerable <IFileInfo> sources, ApplicationModelProviderContext context) { var reflector = new TypeReflectionEngine(); _fw.Environment.LoadMemory(MachineInstance.Current); foreach (var virtualPath in sources) { LoadedModule module; ICodeSource codeSrc; string typeName; if (virtualPath.IsDirectory) { var info = FindModule(virtualPath.Name, MODULE_FILENAME) ?? FindModule(virtualPath.Name, virtualPath.Name + ".os"); if (info == null) { continue; } codeSrc = new FileInfoCodeSource(info); typeName = virtualPath.Name; } else { codeSrc = new FileInfoCodeSource(virtualPath); typeName = System.IO.Path.GetFileNameWithoutExtension(virtualPath.Name); } try { _classAttribResolver.BeforeCompilation(); module = LoadControllerCode(codeSrc); } finally { _classAttribResolver.AfterCompilation(); } var reflectedType = reflector.Reflect <ScriptedController>(module, typeName); var attrList = MapAnnotationsToAttributes(_classAttribResolver.Attributes); var cm = new ControllerModel(typeof(ScriptedController).GetTypeInfo(), attrList.AsReadOnly()); cm.ControllerName = reflectedType.Name; cm.Properties.Add("module", module); cm.Properties.Add("type", reflectedType); FillActions(cm, reflectedType); FillFilters(cm); context.Result.Controllers.Add(cm); } }
public void ReflectExportedVariablesAsPublicProperties() { lock (TestOrderingLock.Lock) { var code = "Перем А; Перем Б Экспорт;"; var module = CreateModule(code); var r = new TypeReflectionEngine(); Type type = r.Reflect(module, "MyType"); var props = type.GetProperties(System.Reflection.BindingFlags.Public); Assert.Equal(type.Name, "MyType"); Assert.Equal(1, props.Length); Assert.Equal("Б", props[0].Name); } }
public void ReflectExportedVariablesAsPublicFields() { lock (TestOrderingLock.Lock) { var code = "Перем А; Перем Б Экспорт;"; var module = CreateModule(code); var r = new TypeReflectionEngine(); Type type = r.Reflect <UserScriptContextInstance>(module, "MyType"); var props = type.GetFields(); Assert.Equal("MyType", type.Name); Assert.Single(props); Assert.Equal("Б", props[0].Name); Assert.True(props[0].IsPublic); } }
private void FillContext(IEnumerable <string> sources, ApplicationModelProviderContext context) { var attrList = new List <string>(); var reflector = new TypeReflectionEngine(); foreach (var virtualPath in sources) { var codeSrc = _scriptsProvider.Get(virtualPath); var module = LoadControllerCode(codeSrc); var baseFileName = System.IO.Path.GetFileNameWithoutExtension(codeSrc.SourceDescription); var type = reflector.Reflect(module, baseFileName); var cm = new ControllerModel(typeof(ScriptedController).GetTypeInfo(), attrList.AsReadOnly()); cm.ControllerName = type.Name; cm.Properties.Add("module", module); cm.Properties.Add("type", type); FillActions(cm, type, GetExportedMethods(module)); context.Result.Controllers.Add(cm); } }