public ServiceRegistry GetServiceRegistry(string name)
        {
            ServiceRegistryLoaderDescriptor loader = GetServiceRegistryLoaderDescriptor(name);

            if (loader == null)
            {
                ServiceRegistryDescriptor descriptor = GetServiceRegistryDescriptor(name);
                return(GetServiceRegistry(descriptor));
            }
            return(GetServiceRegistry(loader));
        }
예제 #2
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));
        }
예제 #3
0
        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));
        }
예제 #4
0
        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);
        }