84 lines
1.9 KiB
C#
84 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using ModestTree;
|
|
using Zenject.Internal;
|
|
|
|
namespace Zenject
|
|
{
|
|
[NoReflectionBaking]
|
|
public class BindStatement : IDisposable
|
|
{
|
|
readonly List<IDisposable> _disposables;
|
|
IBindingFinalizer _bindingFinalizer;
|
|
|
|
public BindStatement()
|
|
{
|
|
_disposables = new List<IDisposable>();
|
|
Reset();
|
|
}
|
|
|
|
public BindingInheritanceMethods BindingInheritanceMethod
|
|
{
|
|
get
|
|
{
|
|
AssertHasFinalizer();
|
|
return _bindingFinalizer.BindingInheritanceMethod;
|
|
}
|
|
}
|
|
|
|
public bool HasFinalizer
|
|
{
|
|
get { return _bindingFinalizer != null; }
|
|
}
|
|
|
|
public void SetFinalizer(IBindingFinalizer bindingFinalizer)
|
|
{
|
|
_bindingFinalizer = bindingFinalizer;
|
|
}
|
|
|
|
void AssertHasFinalizer()
|
|
{
|
|
if (_bindingFinalizer == null)
|
|
{
|
|
throw Assert.CreateException(
|
|
"Unfinished binding! Some required information was left unspecified.");
|
|
}
|
|
}
|
|
|
|
public void AddDisposable(IDisposable disposable)
|
|
{
|
|
_disposables.Add(disposable);
|
|
}
|
|
|
|
public BindInfo SpawnBindInfo()
|
|
{
|
|
var bindInfo = ZenPools.SpawnBindInfo();
|
|
AddDisposable(bindInfo);
|
|
return bindInfo;
|
|
}
|
|
|
|
public void FinalizeBinding(DiContainer container)
|
|
{
|
|
AssertHasFinalizer();
|
|
_bindingFinalizer.FinalizeBinding(container);
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
_bindingFinalizer = null;
|
|
|
|
for (int i = 0; i < _disposables.Count; i++)
|
|
{
|
|
_disposables[i].Dispose();
|
|
}
|
|
|
|
_disposables.Clear();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
ZenPools.DespawnStatement(this);
|
|
}
|
|
}
|
|
}
|