Пример #1
0
        public ServiceRegistry RegisterServiceRegistry(string registryName, Incubator inc, bool overwrite)
        {
            ServiceRegistryDescriptor descriptor = ServiceRegistryDescriptor.FromIncubator(registryName, inc);

            RegisterServiceRegistryDescriptor(descriptor, overwrite);
            return(GetServiceRegistry(descriptor));
        }
Пример #2
0
        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));
        }
Пример #4
0
        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);
        }
Пример #5
0
        public ServiceRegistry GetServiceRegistry(string registryName)
        {
            ScanningTask.Wait();
            ServiceRegistryLoaderDescriptor loader = GetServiceRegistryLoaderDescriptor(registryName);

            if (loader == null)
            {
                ServiceRegistryDescriptor descriptor = GetServiceRegistryDescriptor(registryName);
                return(GetServiceRegistry(descriptor));
            }
            return(GetServiceRegistry(loader));
        }
Пример #6
0
        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());
        }
Пример #7
0
        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);
        }