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); }
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); }); }