using System; using Reflex.Core; using Reflex.Enums; using Reflex.Injectors; namespace Reflex.Resolvers { internal sealed class TransientFactoryResolver : IResolver { private readonly Func _factory; public Lifetime Lifetime => Lifetime.Transient; public Container DeclaringContainer { get; set; } public Resolution Resolution => Resolution.Lazy; public TransientFactoryResolver(Func factory) { Diagnosis.RegisterCallSite(this); _factory = factory; } public object Resolve(Container resolvingContainer) { Diagnosis.IncrementResolutions(this); var instance = _factory.Invoke(resolvingContainer); resolvingContainer.Disposables.TryAdd(instance); AttributeInjector.Inject(instance, resolvingContainer); Diagnosis.RegisterInstance(this, instance); return instance; } public void Dispose() { } } }