namespace Zenject { // // I'd recommmend using Installer<> instead, and then always use the approach // of calling `MyInstaller.Install(Container)` // This way, if you want to add strongly typed parameters later you can do this // by deriving from a different Installer<> base class // public abstract class Installer : InstallerBase { } // // Derive from this class then install like this: // FooInstaller.Install(Container); // public abstract class Installer : InstallerBase where TDerived : Installer { public static void Install(DiContainer container) { container.Instantiate().InstallBindings(); } } // Use these versions to pass parameters to your installer public abstract class Installer : InstallerBase where TDerived : Installer { public static void Install(DiContainer container, TParam1 p1) { container.InstantiateExplicit( InjectUtil.CreateArgListExplicit(p1)).InstallBindings(); } } public abstract class Installer : InstallerBase where TDerived : Installer { public static void Install(DiContainer container, TParam1 p1, TParam2 p2) { container.InstantiateExplicit( InjectUtil.CreateArgListExplicit(p1, p2)).InstallBindings(); } } public abstract class Installer : InstallerBase where TDerived : Installer { public static void Install(DiContainer container, TParam1 p1, TParam2 p2, TParam3 p3) { container.InstantiateExplicit( InjectUtil.CreateArgListExplicit(p1, p2, p3)).InstallBindings(); } } public abstract class Installer : InstallerBase where TDerived : Installer { public static void Install(DiContainer container, TParam1 p1, TParam2 p2, TParam3 p3, TParam4 p4) { container.InstantiateExplicit( InjectUtil.CreateArgListExplicit(p1, p2, p3, p4)).InstallBindings(); } } public abstract class Installer : InstallerBase where TDerived : Installer { public static void Install(DiContainer container, TParam1 p1, TParam2 p2, TParam3 p3, TParam4 p4, TParam5 p5) { container.InstantiateExplicit( InjectUtil.CreateArgListExplicit(p1, p2, p3, p4, p5)).InstallBindings(); } } }