public void Resolver(IResolverContext context, IDependencyResolver resolver) { var args = context.HasImplementationType() && context.HasPublicConstructor() ? ResolverHelper.GetConstructorParameters( context.Dependency.GetImplementationType(), resolver) : ArrayExtends.Empty <object>(); context.Resolved = CompileCacheManager.GetCache(context.Dependency, resolver, args); context.Handled = context.Resolved != null && !PropertyCacheManager.Any(context.Dependency); }
public void Resolver(IResolverContext context, IDependencyResolver resolver) { try { var args = context.HasImplementationType() && context.HasPublicConstructor() ? ResolverHelper.GetConstructorParameters( context.Dependency.GetImplementationType(), resolver) : ArrayExtends.Empty <object>(); context.Resolved = CompileCacheManager.GetOrSetCache(context.Dependency, () => CreateDelegate(context.Resolved as Expression)). Invoke(resolver, args); CacheResolved(context, resolver); } catch (Exception ex) { throw new InvalidOperationException($"未能创建类型\"{context.Dependency.ServiceType}\"的实例。", ex); } }
/// <summary> /// 获取缓存 /// </summary> public static IEnumerable <ICustomInterceptor> GetCache(Type key) { var cache = new CustomInterceptorCacheManager(key).GetValue(); return(cache ?? ArrayExtends.Empty <ICustomInterceptor>()); }