DefaultLifetimeScope
using Castle.Core;
using System;
namespace Castle.MicroKernel.Lifestyle.Scoped
{
public class DefaultLifetimeScope : ILifetimeScope, IDisposable
{
private static readonly Action<Burden> emptyOnAfterCreated = delegate {
};
private readonly Action<Burden> onAfterCreated;
private readonly IScopeCache scopeCache;
public DefaultLifetimeScope(IScopeCache scopeCache = null, Action<Burden> onAfterCreated = null)
{
this.scopeCache = (scopeCache ?? new ScopeCache());
this.onAfterCreated = (onAfterCreated ?? emptyOnAfterCreated);
}
public void Dispose()
{
(scopeCache as IDisposable)?.Dispose();
}
public Burden GetCachedInstance(ComponentModel model, ScopedInstanceActivationCallback createInstance)
{
Burden burden = scopeCache[model];
if (burden == null)
burden = (scopeCache[model] = createInstance(onAfterCreated));
return burden;
}
}
}