151 lines
4.2 KiB
C#
151 lines
4.2 KiB
C#
using NUnit.Framework;
|
|
using Assert = ModestTree.Assert;
|
|
|
|
namespace Zenject.Tests.Bindings
|
|
{
|
|
[TestFixture]
|
|
public class TestWithKernel : ZenjectUnitTestFixture
|
|
{
|
|
static int GlobalInitializeCount;
|
|
|
|
public class Foo : IInitializable
|
|
{
|
|
public bool WasInitialized
|
|
{
|
|
get; private set;
|
|
}
|
|
|
|
public int InitializeCount
|
|
{
|
|
get; private set;
|
|
}
|
|
|
|
public void Initialize()
|
|
{
|
|
InitializeCount = ++GlobalInitializeCount;
|
|
WasInitialized = true;
|
|
}
|
|
}
|
|
|
|
public class FooFacade
|
|
{
|
|
[Inject]
|
|
public Foo Foo
|
|
{
|
|
get; private set;
|
|
}
|
|
}
|
|
|
|
public class FooInstaller : Installer<FooInstaller>
|
|
{
|
|
public override void InstallBindings()
|
|
{
|
|
InstallFoo(Container);
|
|
}
|
|
}
|
|
|
|
static void InstallFoo(DiContainer subContainer)
|
|
{
|
|
subContainer.Bind<FooFacade>().AsSingle();
|
|
subContainer.BindInterfacesAndSelfTo<Foo>().AsSingle();
|
|
}
|
|
|
|
[Test]
|
|
public void TestByInstaller()
|
|
{
|
|
Container.Bind<FooFacade>().FromSubContainerResolve()
|
|
.ByInstaller<FooInstaller>().WithKernel().AsSingle();
|
|
|
|
ZenjectManagersInstaller.Install(Container);
|
|
Container.ResolveRoots();
|
|
|
|
var facade = Container.Resolve<FooFacade>();
|
|
|
|
Assert.That(!facade.Foo.WasInitialized);
|
|
Container.Resolve<InitializableManager>().Initialize();
|
|
Assert.That(facade.Foo.WasInitialized);
|
|
}
|
|
|
|
[Test]
|
|
public void TestByMethod()
|
|
{
|
|
Container.Bind<FooFacade>().FromSubContainerResolve()
|
|
.ByMethod(InstallFoo).WithKernel().AsSingle();
|
|
|
|
ZenjectManagersInstaller.Install(Container);
|
|
Container.ResolveRoots();
|
|
|
|
var facade = Container.Resolve<FooFacade>();
|
|
|
|
Assert.That(!facade.Foo.WasInitialized);
|
|
Container.Resolve<InitializableManager>().Initialize();
|
|
Assert.That(facade.Foo.WasInitialized);
|
|
}
|
|
|
|
public class FooKernel : Kernel
|
|
{
|
|
}
|
|
|
|
public class Bar : IInitializable
|
|
{
|
|
public int InitializeCount
|
|
{
|
|
get; private set;
|
|
}
|
|
|
|
public void Initialize()
|
|
{
|
|
InitializeCount = ++GlobalInitializeCount;
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void TestByInstallerCustomOrder()
|
|
{
|
|
GlobalInitializeCount = 0;
|
|
|
|
Container.BindInterfacesAndSelfTo<Bar>().AsSingle();
|
|
Container.Bind<FooFacade>().FromSubContainerResolve()
|
|
.ByInstaller<FooInstaller>().WithKernel<FooKernel>().AsSingle();
|
|
|
|
ZenjectManagersInstaller.Install(Container);
|
|
Container.ResolveRoots();
|
|
|
|
var facade = Container.Resolve<FooFacade>();
|
|
|
|
Assert.That(!facade.Foo.WasInitialized);
|
|
Container.Resolve<InitializableManager>().Initialize();
|
|
Assert.That(facade.Foo.WasInitialized);
|
|
|
|
Assert.IsEqual(Container.Resolve<Bar>().InitializeCount, 1);
|
|
Assert.IsEqual(facade.Foo.InitializeCount, 2);
|
|
}
|
|
|
|
[Test]
|
|
public void TestByInstallerCustomOrder2()
|
|
{
|
|
GlobalInitializeCount = 0;
|
|
|
|
Container.BindInterfacesAndSelfTo<Bar>().AsSingle();
|
|
Container.Bind<FooFacade>().FromSubContainerResolve()
|
|
.ByInstaller<FooInstaller>().WithKernel<FooKernel>().AsSingle();
|
|
|
|
Container.BindExecutionOrder<FooKernel>(-1);
|
|
|
|
ZenjectManagersInstaller.Install(Container);
|
|
Container.ResolveRoots();
|
|
|
|
var facade = Container.Resolve<FooFacade>();
|
|
|
|
Assert.That(!facade.Foo.WasInitialized);
|
|
Container.Resolve<InitializableManager>().Initialize();
|
|
Assert.That(facade.Foo.WasInitialized);
|
|
|
|
Assert.IsEqual(Container.Resolve<Bar>().InitializeCount, 2);
|
|
Assert.IsEqual(facade.Foo.InitializeCount, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
|