public ServiceRegistry RegisterServiceRegistry(string registryName, Incubator inc, bool overwrite) { ServiceRegistryDescriptor descriptor = ServiceRegistryDescriptor.FromIncubator(registryName, inc); RegisterServiceRegistryDescriptor(descriptor, overwrite); return(GetServiceRegistry(descriptor)); }
public void CreateRegistry() { DataSettings dataSettings = DataSettings.Default; IApplicationNameProvider appNameProvider = DefaultConfigurationApplicationNameProvider.Instance; ServiceRegistryService serviceRegistryService = ServiceRegistryService.GetLocalServiceRegistryService(dataSettings, appNameProvider, GetArgument("AssemblySearchPattern", "Please specify the AssemblySearchPattern to use"), GetLogger()); List <dynamic> types = new List <dynamic>(); string assemblyPath = "\r\n"; DirectoryInfo sysData = DataSettings.Current.GetSysDataDirectory(nameof(ServiceRegistry).Pluralize()); ServiceRegistryRepository repo = DataSettings.Current.GetSysDaoRepository <ServiceRegistryRepository>(); ServiceRegistryDescriptor registry = new ServiceRegistryDescriptor(); while (!assemblyPath.Equals(string.Empty)) { if (!string.IsNullOrEmpty(assemblyPath.Trim())) { Assembly assembly = Assembly.LoadFrom(assemblyPath); if (assembly == null) { OutLineFormat("Assembly not found: {0}", ConsoleColor.Magenta, assemblyPath); } else { OutLineFormat("Storing assembly file chunks: {0}", ConsoleColor.Cyan, assembly.FullName); serviceRegistryService.FileService.StoreFileChunks(assembly.GetFileInfo(), assembly.FullName); string className = "\r\n"; while (!className.Equals(string.Empty)) { if (!string.IsNullOrEmpty(className.Trim())) { Type type = GetType(assembly, className); if (type == null) { Thread.Sleep(300); OutLineFormat("Specified class was not found in the current assembly: {0}", assembly.FullName); } else { registry.AddService(type, type); } } Thread.Sleep(300); className = Prompt("Enter the name of a class to add to the service registry (leave blank to finish)"); } } } Thread.Sleep(300); assemblyPath = Prompt("Enter the path to an assembly file containing service types (leave blank to finish)"); } string registryName = Prompt("Enter a name for the registry"); string path = Path.Combine(sysData.FullName, $"{registryName}.json"); registry.Name = registryName; registry.Save(repo); registry.ToJsonFile(path); }
public ServiceRegistry GetServiceRegistry(string name) { ServiceRegistryLoaderDescriptor loader = GetServiceRegistryLoaderDescriptor(name); if (loader == null) { ServiceRegistryDescriptor descriptor = GetServiceRegistryDescriptor(name); return(GetServiceRegistry(descriptor)); } return(GetServiceRegistry(loader)); }
public virtual ServiceRegistryDescriptor GetServiceRegistryDescriptor(string name) { Dictionary <string, Func <FileInfo, ServiceRegistryDescriptor> > deserializers = new Dictionary <string, Func <FileInfo, ServiceRegistryDescriptor> > { { ".json", (fi) => fi.FromJsonFile <ServiceRegistryDescriptor>() }, { ".yml", (fi) => fi.FromYamlFile <ServiceRegistryDescriptor>() } }; DirectoryInfo systemServiceRegistryDir = DataSettings.GetSysDataDirectory(nameof(ServiceRegistry).Pluralize()); ServiceRegistryDescriptor fromFile = new ServiceRegistryDescriptor { Name = name }; ServiceDescriptor[] descriptors = new ServiceDescriptor[] { }; FileInfo file = new FileInfo(Path.Combine(systemServiceRegistryDir.FullName, $"{name}.json")); foreach (string extension in new[] { ".yml", ".json" }) { string path = Path.Combine(systemServiceRegistryDir.FullName, $"{name}{extension}"); if (File.Exists(path)) { file = new FileInfo(path); fromFile = deserializers[extension](file); break; } } Dictionary <string, Action <ServiceRegistryDescriptor, FileInfo> > serializers = new Dictionary <string, Action <ServiceRegistryDescriptor, FileInfo> > { { ".json", (sr, fi) => sr.ToJsonFile(fi) }, { ".yml", (sr, fi) => sr.ToYamlFile(fi) } }; ServiceRegistryDescriptor fromRepo = ServiceRegistryRepository.ServiceRegistryDescriptorsWhere(c => c.Name == name).FirstOrDefault(); if (fromRepo != null) { HashSet <ServiceDescriptor> svcs = new HashSet <ServiceDescriptor>(); if (fromFile != null) { fromFile.Services?.Each(svc => svcs.Add(svc)); } fromRepo.Services?.Each(svc => svcs.Add(svc)); fromRepo.Services = svcs.ToList(); serializers[Path.GetExtension(file.FullName)](fromRepo, file); } ServiceRegistryDescriptor toSave = fromRepo ?? fromFile; if (toSave != null) { ServiceRegistryRepository.Save(toSave); } return(fromRepo ?? fromFile); }
public ServiceRegistry GetServiceRegistry(string registryName) { ScanningTask.Wait(); ServiceRegistryLoaderDescriptor loader = GetServiceRegistryLoaderDescriptor(registryName); if (loader == null) { ServiceRegistryDescriptor descriptor = GetServiceRegistryDescriptor(registryName); return(GetServiceRegistry(descriptor)); } return(GetServiceRegistry(loader)); }
public ServiceRegistry GetServiceRegistry(ServiceRegistryDescriptor descriptor) { Args.ThrowIfNull(descriptor, "descriptor"); ServiceRegistryBuilder builder = new ServiceRegistryBuilder(); foreach (ServiceDescriptor service in descriptor.Services) { ServiceDefinition definition = ResolveDefinition(service); builder.For(definition.ForType); builder.Use(definition.UseType); } return(builder.Build()); }
public virtual ServiceRegistryDescriptor RegisterServiceRegistryDescriptor(ServiceRegistryDescriptor registry, bool overwrite) { Args.ThrowIfNull(registry, "registry"); ServiceRegistryDescriptor existing = ServiceRegistryRepository.ServiceRegistryDescriptorsWhere(c => c.Name == registry.Name).FirstOrDefault(); Args.ThrowIf(existing != null && !overwrite, "Registry by that name ({0}) already exists", registry.Name); if ((existing != null && overwrite) || existing == null) { existing = ServiceRegistryRepository.Save(registry); } return(existing); }