35 lines
893 B
C#
35 lines
893 B
C#
using System;
|
|
using Reflex.Core;
|
|
using Reflex.Enums;
|
|
|
|
namespace Reflex.Resolvers
|
|
{
|
|
internal sealed class SingletonValueResolver : IResolver
|
|
{
|
|
private readonly object _value;
|
|
public Lifetime Lifetime => Lifetime.Singleton;
|
|
public Container DeclaringContainer { get; set; }
|
|
public Resolution Resolution => Resolution.Lazy;
|
|
|
|
public SingletonValueResolver(object value)
|
|
{
|
|
Diagnosis.RegisterCallSite(this);
|
|
Diagnosis.RegisterInstance(this, value);
|
|
_value = value;
|
|
}
|
|
|
|
public object Resolve(Container resolvingContainer)
|
|
{
|
|
Diagnosis.IncrementResolutions(this);
|
|
return _value;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (_value is IDisposable disposable)
|
|
{
|
|
disposable.Dispose();
|
|
}
|
|
}
|
|
}
|
|
} |