<PackageReference Include="Castle.Windsor" Version="4.1.1" />

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