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); } } }