public ServiceRegistry GetServiceRegistry(string name) { ServiceRegistryLoaderDescriptor loader = GetServiceRegistryLoaderDescriptor(name); if (loader == null) { ServiceRegistryDescriptor descriptor = GetServiceRegistryDescriptor(name); return(GetServiceRegistry(descriptor)); } return(GetServiceRegistry(loader)); }
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 RegisterServiceRegistryLoader(string registryName, MethodInfo method, bool overwrite, string description = null) { ServiceRegistryLoaderDescriptor loader = new ServiceRegistryLoaderDescriptor { Name = registryName, Description = description, LoaderType = method.DeclaringType.FullName, LoaderMethod = method.Name, LoaderAssembly = method.DeclaringType.Assembly.FullName }; loader = RegisterServiceRegistryLoaderDescriptor(loader, overwrite); return(GetServiceRegistry(loader)); }
public ServiceRegistry GetServiceRegistry(ServiceRegistryLoaderDescriptor descriptor, bool setProperties = false) { Type loaderType = ResolveType(descriptor.LoaderType, descriptor.LoaderAssembly); MethodInfo loader = loaderType.GetMethod(descriptor.LoaderMethod); object instance = null; if (!loader.IsStatic) { instance = loaderType.Construct(); } if (loader.ReturnType != typeof(CoreServices.ServiceRegistry)) { throw new InvalidOperationException($"The specified method {descriptor.LoaderMethod} must have a ReturnType of {nameof(CoreServices.ServiceRegistry)}"); } return((CoreServices.ServiceRegistry)loader.Invoke(instance, new object[] { })); }
public virtual ServiceRegistryLoaderDescriptor RegisterServiceRegistryLoaderDescriptor(ServiceRegistryLoaderDescriptor loader, bool overwrite) { Args.ThrowIfNull(loader, "loader"); ServiceRegistryLoaderDescriptor existing = ServiceRegistryRepository.ServiceRegistryLoaderDescriptorsWhere(c => c.Name == loader.Name).FirstOrDefault(); if (existing != null && overwrite && IsLocked(loader.Name)) { Args.Throw <InvalidOperationException>("Registry by that name ({0}) is locked", loader.Name); } Args.ThrowIf(existing != null && !overwrite, "RegistryLoader by that name ({0}) already exists", loader.Name); if ((existing != null && overwrite) || existing == null) { existing = ServiceRegistryRepository.Save(loader); } return(existing); }