コード例 #1
0
        internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
        {
            var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor);

            _callback?.OnResolve(serviceType, serviceProviderEngineScope);
            return(realizedService.Invoke(serviceProviderEngineScope));
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        /// <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));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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));
        }
コード例 #7
0
 protected virtual Func <ServiceProviderEngineScope, object> GetOrCreateRealizedService(Type serviceType)
 {
     return(RealizedServices.GetOrAdd(serviceType, _createServiceAccessor));
 }