Пример #1
0
        private IIocContainer InnerAddType(Type expectType, Func <TypeServiceBinder, IServiceBuilder> callback, bool promote)
        {
            var binder = new TypeServiceBinder(this, null, expectType, true);

            callback(binder);
            var container = this;

            do
            {
                SetTypeBinder(container, binder);
            } while(promote && container._hasParent && (container = container.Parent) != null);

            return(this);
        }
Пример #2
0
 private static void SetTypeBinder(IocContainer container, TypeServiceBinder item)
 {
     container.CacheType.AddOrUpdate(item.ExpectType, t => new List <ICallSite>(1)
     {
         item.CallSite
     }, (t, list) =>
     {
         if (item.Overwrite)
         {
             list.Clear();
         }
         list.Insert(0, item.CallSite);
         list.TrimExcess();
         return(list);
     });
 }