private void RegisterProperty(ElementAttributeMetadata metadata, String value) { var property = metadata.XName; if (_smartProperties.ContainsKey(property)) { throw new ElementException(ElementErrorCodes.PropertyAlreadyRegistered, property); } var propertyInfo = RuntimeType.GetProperty(metadata.MemberInfo.Name); if (value.StartsWith("{") && value.EndsWith("}")) { var cmd = value.Trim("{} ".ToCharArray()); var pair = cmd.Split(" ".ToCharArray(), 2); var keyword = pair[0]; var instruccion = pair.GetLength(0) > 1 ? pair[1] : String.Empty; var extension = MetadataDirectory.GetCustomMarkupExtensions(keyword); if (extension == null) { throw new ElementException(ElementErrorCodes.CustomMarkupExtensionNotFound, keyword); } var @object = extension.ProvideValue(this, metadata, keyword, instruccion); _smartProperties.Add(property, new SmartProperty(@object)); return; } _smartProperties.Add(property, new SmartProperty(Cast(value, propertyInfo.PropertyType))); }
public static FrameworkElement Factory(XElement xElement, FrameworkApplication application, FrameworkElement parent) { var metadata = MetadataDirectory.GetMetadata(xElement); var constructor = MetadataDirectory.GetRuntimeType(xElement).GetConstructor(Type.EmptyTypes); var item = constructor.Invoke(null) as FrameworkElement; if (item == null) { throw new ElementException(ElementErrorCodes.UnableToCreateFrameworkElement, MetadataDirectory.GetRuntimeType(xElement).Name); } item._metadata = metadata; item.Application = application; item.RegisterProperty(xElement.Name.LocalName, item); item.Parent = parent; var staticKey = xElement.Attribute(MetadataDirectory.StaticsNamespace + "Key"); if (staticKey != null) { item.StaticKey = staticKey.Value; } else { var att = String.Format("{0}_{1:D4}_{2:D3}", xElement.Name.LocalName, xElement.GetHashCode(), RandomUtils.RandomNumber(1, 999)); xElement.SetAttributeValue(MetadataDirectory.StaticsNamespace + "Key", att); item.StaticKey = att; } application.RegisterFrameworkElement(item); item.GenericType = MetadataDirectory.GetGenericType(xElement); item._xElement = xElement; item._xElement.AddAnnotation(new AnnotationWrapper { Element = item }); // Creo los hijos if (item._metadata.IsContainer) { foreach (var xChild in xElement.Elements()) { item._items.Add(Factory(xChild, item.Application, item)); } } //foreach (var se in extensions) se.AfterCreate(item); return(item); }
/// <summary> /// The main entry point for the application. /// </summary> public static void LoadAndRun(String[] args) { var appFile = String.Format(@"{0}\{1}", Process.GetApplicationFolder(), ((args.Length == 0) ? "AutoRun.xml" : args[0])); STrace.Debug(typeof(ApplicationLoader).FullName, "Creating Backend Category into PerformanceCounterHelper"); PerformanceCounterHelper.Create(new BackendCategory()); //STrace.Debug(typeof(ApplicationLoader).FullName, "Launching Debugger..."); //Debugger.LaunchDebugger(1); STrace.Debug(typeof(ApplicationLoader).FullName, "Initiating AppDomain..."); Process.InitAppDomain(); try { STrace.Debug(typeof(ApplicationLoader).FullName, "Loading MetadataDirectory..."); MetadataDirectory.Load(); } catch (Exception e) { STrace.Exception(typeof(ApplicationLoader).FullName, e, "No se pudieron cargar los assemblies, borre y vuelva a copiar todos los archivos .exe .dll y .pdb"); Thread.Sleep(2000); return; } if (!IOUtils.FileExists(appFile)) { STrace.Error(typeof(ApplicationLoader).FullName, String.Format("No existe el archivo '{0}'", appFile)); } var mode = FrameworkApplication.GetRunMode(appFile); switch (mode) { case RunMode.WinService: ServiceMain(appFile, args[1]); break; case RunMode.WinForm: WindowsMain(appFile); break; case RunMode.Hidden: HiddenInstallMain(appFile); break; case RunMode.Console: ConsoleMain(appFile); break; default: STrace.Error(typeof(ApplicationLoader).FullName, "No se pudo determinar el modo requerido de ejecucion para la aplicacion."); break; } Environment.Exit(0); }