private object BuildUp(IResolverContext context)
        {
            var callSiteCollection = CallSiteCacheManager.GetCache(this).ToArray();
            var i = callSiteCollection.Length - 1;

            for (; i >= 0; i--)
            {
                var callSite = callSiteCollection[i];

                if (!callSite.Requires(context, this))
                {
                    continue;
                }

                callSite.Resolver(context, this);

                if (!context.Handled)
                {
                    continue;
                }

                return(context.Resolved);
            }
            return(context.Resolved);
        }
 private void InitializationCallSite()
 {
     CallSiteCacheManager.SetCache(this,
                                   new PropertyResolverCallSite(),
                                   new CompileResolverCallSite(),
                                   new ConstructorResolverCallSite(),
                                   new NewResolverCallSite(),
                                   new InstanceResolverCallSite(),
                                   new DelegateResolverCallSite(),
                                   new ScopedResolverCallSite(),
                                   new SingletonResolverCallSite(),
                                   new TransientResolverCallSite());
 }
Esempio n. 3
0
 /// <summary>
 ///     移除所有解析器调用
 /// </summary>
 /// <param name="dependencyResolver"></param>
 public static void RemoveAllCallSites(this IDependencyResolver dependencyResolver)
 {
     CallSiteCacheManager.Clear();
 }
Esempio n. 4
0
 /// <summary>
 ///     添加解析器调用
 /// </summary>
 public static void AddCallSite(this IDependencyResolver dependencyResolver, params IResolverCallSite[] callSites)
 {
     CallSiteCacheManager.SetCache(dependencyResolver, callSites);
 }
 public void Dispose()
 {
     ScopedKeyCacheManager.RemoveCache(this);
     DependencyCacheManager.RemoveCache(this);
     CallSiteCacheManager.RemoveCache(this);
 }