Exemple #1
0
        private Func <ServiceProviderEngineScope, object> CreateServiceAccessor(Type serviceType)
        {
            var callSite = CallSiteFactory.CreateCallSite(serviceType, new CallSiteChain());

            if (callSite != null)
            {
                _callback?.OnCreate(callSite);
                return(RealizeService(callSite));
            }

            return(_ => null);
        }
        private static Func <Type, object> GetCallSiteFactory(params ServiceDescriptor[] descriptors)
        {
            var collection = new ServiceCollection();

            foreach (var descriptor in descriptors)
            {
                collection.Add(descriptor);
            }

            var callSiteFactory = new CallSiteFactory(collection.ToArray());

            return(type => callSiteFactory.CreateCallSite(type, new CallSiteChain()));
        }
        private void ResolveSingletonServices(IEnumerable <ServiceDescriptor> serviceDescriptors)
        {
            var callSite = CallSiteFactory.CreateCallSite(typeof(IServiceProvider), new CallSiteChain());

            if (callSite != null)
            {
                RuntimeResolver.Resolve(callSite, Root);
            }

            callSite = CallSiteFactory.CreateCallSite(typeof(IServiceScopeFactory), new CallSiteChain());
            if (callSite != null)
            {
                RuntimeResolver.Resolve(callSite, Root);
            }

            foreach (var descriptor in serviceDescriptors.Where(sd => sd.Lifetime == ServiceLifetime.Singleton && !sd.ServiceType.IsGenericTypeDefinition))
            {
                callSite = CallSiteFactory.CreateCallSite(descriptor.ServiceType, new CallSiteChain());
                if (callSite != null)
                {
                    RuntimeResolver.Resolve(callSite, Root);
                }
            }
        }