internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) { var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor); _callback?.OnResolve(serviceType, serviceProviderEngineScope); return(realizedService.Invoke(serviceProviderEngineScope)); }
/// <summary> /// Gets the service object of the specified type. /// </summary> /// <param name="serviceType"></param> /// <returns></returns> public object GetService(Type serviceType) { var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor, this); _callSiteValidator?.ValidateResolution(serviceType, this); return(realizedService.Invoke(this)); }
internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) { if (_disposed) { ThrowHelper.ThrowObjectDisposedException(); } var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor); _callback?.OnResolve(serviceType, serviceProviderEngineScope); return(realizedService.Invoke(serviceProviderEngineScope)); }
/// <summary> /// 这个方法获取服务实例对象,可以看到具有两个此方法,并且第一个调用了第二个,并将顶级容器Root进行了传入,而在第二个方法中,获取并添加_createServiceAccessor委托,然后调用此委托进行获取服务实例 /// </summary> /// <param name="serviceType"></param> /// <param name="serviceProviderEngineScope"></param> /// <returns></returns> internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) { if (_disposed) { ThrowHelper.ThrowObjectDisposedException(); } var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor); //添加并获取根据容器对象实例化对象的方法,其方法由子类进行重写 _callback?.OnResolve(serviceType, serviceProviderEngineScope); // 验证是否允许进行实例化对象 return(realizedService.Invoke(serviceProviderEngineScope)); }
internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) { if (_disposed) { ThrowHelper.ThrowObjectDisposedException(); } Func <ServiceProviderEngineScope, object> realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor); _callback?.OnResolve(serviceType, serviceProviderEngineScope); DependencyInjectionEventSource.Log.ServiceResolved(serviceType); return(realizedService.Invoke(serviceProviderEngineScope)); }
internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) //获取服务类型对应的服务实例,首先会从 RealizedServices 中获取服务类型对应的创建实例方法 (如果没有就会在运行是将该方法加入 RealizedServices,运行时动态添加)。 //获取的创建实例的委托方法需要一个类型为 ServiceProviderEngineScope 的参数才能调用,返回服务实例。 //最后调用这个创建服务类型实例的方法。 { if (_disposed) { ThrowHelper.ThrowObjectDisposedException(); } var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor); _callback?.OnResolve(serviceType, serviceProviderEngineScope); return(realizedService.Invoke(serviceProviderEngineScope)); }
protected virtual Func <ServiceProviderEngineScope, object> GetOrCreateRealizedService(Type serviceType) { return(RealizedServices.GetOrAdd(serviceType, _createServiceAccessor)); }