示例#1
0
        public static IServiceCollection AddScanServices(this IServiceCollection services, Action <ServiceScanOptions> options)
        {
            ServiceScanOptions option = new ServiceScanOptions();

            option.DescriptorProviderTypes.Add(new DefaultServiceRegisterDescriptorProvider());
            options?.Invoke(option);

            IServiceRegisterDescriptorCollectionProvider provider   = new ServiceRegisterDescriptorCollectionProvider(option.DescriptorProviderTypes);
            ServiceRegisterDescriptorCollection          collection = provider.ServiceRegisterDescriptors;

            foreach (var item in collection.Items)
            {
                ServiceRegister.Registe(services, item);
            }

            return(services);
        }
        private void UpdateCollection()
        {
            var context = new ServiceRegisterDescriptorProviderContext();

            for (var i = 0; i < _serviceRegisterDescriptorProviders.Length; i++)
            {
                _serviceRegisterDescriptorProviders[i].OnProvidersExecuting(context);
            }

            for (var i = _serviceRegisterDescriptorProviders.Length - 1; i >= 0; i--)
            {
                _serviceRegisterDescriptorProviders[i].OnProvidersExecuted(context);
            }

            _collection = new ServiceRegisterDescriptorCollection(
                new ReadOnlyCollection <ServiceRegisterDescriptor>(context.Results));
        }