public override object Resolve(CreationContext context, Burden burden, IReleasePolicy releasePolicy) { if (cachedBurden != null) { return cachedBurden.Instance; } var instanceFromContext = context.GetContextualProperty(ComponentActivator); if (instanceFromContext != null) { //we've been called recursively, by some dependency from base.Resolve call return instanceFromContext; } object instance; lock (ComponentActivator) { if (cachedBurden != null) { return cachedBurden.Instance; } instance = base.CreateInstance(context, burden); cachedBurden = burden; } Track(burden, releasePolicy); return instance; }
public override object Resolve(CreationContext context, IReleasePolicy releasePolicy) { // 1. read from cache if (cachedBurden != null) { return cachedBurden.Instance; } var instanceFromContext = context.GetContextualProperty(ComponentActivator); if (instanceFromContext != null) { //we've been called recursively, by some dependency from base.Resolve call return instanceFromContext; } var initializing = false; try { initializing = init.ExecuteThreadSafeOnce(); if (cachedBurden != null) { return cachedBurden.Instance; } var burden = CreateInstance(context, true); cachedBurden = burden; Track(burden, releasePolicy); return burden.Instance; } finally { if (initializing) { init.EndThreadSafeOnceSection(); } } }
public override object Resolve(CreationContext context) { if (instance == null) { var instanceFromContext = context.GetContextualProperty(ComponentActivator); if (instanceFromContext != null) { //we've been called recursively, by some dependency from base.Resolve call return instanceFromContext; } lock (ComponentActivator) { if (instance == null) { instance = base.Resolve(context); } } } return instance; }
public override object Resolve(CreationContext context, IReleasePolicy releasePolicy) { // 1. read from cache if (cachedBurden != null) { return cachedBurden.Instance; } var instanceFromContext = context.GetContextualProperty(ComponentActivator); if (instanceFromContext != null) { //we've been called recursively, by some dependency from base.Resolve call return instanceFromContext; } lock (ComponentActivator) { if (cachedBurden != null) { return cachedBurden.Instance; } return GetNewInstance(context, releasePolicy); } }
public object GetContextInstance(CreationContext context) { return context.GetContextualProperty(ComponentActivator); }