AbstractLifestyleManager
Base implementation of ILifestyleManager
using Castle.Core;
using Castle.MicroKernel.Context;
using System;
namespace Castle.MicroKernel.Lifestyle
{
[Serializable]
public abstract class AbstractLifestyleManager : ILifestyleManager, IDisposable
{
private IComponentActivator componentActivator;
private IKernel kernel;
private ComponentModel model;
protected IComponentActivator ComponentActivator => componentActivator;
protected IKernel Kernel => kernel;
protected ComponentModel Model => model;
public abstract void Dispose();
public virtual void Init(IComponentActivator componentActivator, IKernel kernel, ComponentModel model)
{
this.componentActivator = componentActivator;
this.kernel = kernel;
this.model = model;
}
public virtual bool Release(object instance)
{
componentActivator.Destroy(instance);
return true;
}
public virtual object Resolve(CreationContext context, IReleasePolicy releasePolicy)
{
Burden burden = CreateInstance(context, false);
Track(burden, releasePolicy);
return burden.Instance;
}
protected virtual Burden CreateInstance(CreationContext context, bool trackedExternally)
{
Burden burden = context.CreateBurden(ComponentActivator, trackedExternally);
componentActivator.Create(context, burden);
return burden;
}
protected virtual void Track(Burden burden, IReleasePolicy releasePolicy)
{
if (burden.RequiresPolicyRelease)
releasePolicy.Track(burden.Instance, burden);
}
}
}