private static Func <Type, ServiceCallSite> 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.GetCallSite(type, new CallSiteChain())); }
private Func <ServiceProviderEngineScope, object> CreateServiceAccessor(Type serviceType) { ServiceCallSite callSite = CallSiteFactory.GetCallSite(serviceType, new CallSiteChain()); if (callSite != null) { DependencyInjectionEventSource.Log.CallSiteBuilt(serviceType, callSite); _callback?.OnCreate(callSite); return(RealizeService(callSite)); } return(_ => null); }
private Func <ServiceProviderEngineScope, object> CreateServiceAccessor(Type serviceType) // 这个方法的作用是根据服务类型,创建对应的产生服务实例的委托方法。 // 这个方法会在 CallSiteFactory 中查找输入服务类型对应的创建服务实例有关的信息。并将得到的 callSite 信息传入由子类实现的 RealizeService 方法。最后将 RealizeService 方法返回。 // 如果 CallSiteFactory 中没有对应的信息, 就会将 CallSiteFactory 在内部新添加这个信息(运行时动态添加) { var callSite = CallSiteFactory.GetCallSite(serviceType, new CallSiteChain()); if (callSite != null) { _callback?.OnCreate(callSite); return(RealizeService(callSite)); } return(_ => null); }
public void ValidateService(ServiceDescriptor descriptor) { if (descriptor.ServiceType.IsGenericType && !descriptor.ServiceType.IsConstructedGenericType) { return; } try { ServiceCallSite callSite = CallSiteFactory.GetCallSite(descriptor, new CallSiteChain()); if (callSite != null) { _callback?.OnCreate(callSite); } } catch (Exception e) { throw new InvalidOperationException($"Error while validating the service descriptor '{descriptor}': {e.Message}", e); } }