Zenject icon indicating copy to clipboard operation
Zenject copied to clipboard

i need to declare many signals. is there a solution for that?

Open virtouso opened this issue 2 years ago • 1 comments

there are many classes that i finish the name with "Signal" and i define them with DeclareSignal.

I think there can be a solution that declares many signal classes automatically like using reflection and attributes.

virtouso avatar Nov 07 '22 20:11 virtouso

    public override void InstallBindings()
    {
        SignalBusInstaller.Install(Container);
        
        InstallBindingsOfType<GameSignalBase>(false);
        InstallBindingsOfType<OptionalGameSignalBase>(true);
    }

    private void InstallBindingsOfType<T>(bool bOptional)
    {
        var signalTypeEnumerator = Assembly.GetAssembly(GetType()).GetTypes()
            .Where(t => t.IsClass && !t.IsAbstract && typeof(T).IsAssignableFrom(t));

        var typeEnumerator = signalTypeEnumerator.ToList();
        if (typeEnumerator.Any())
        {
            foreach (var type in typeEnumerator)
            {
                if (bOptional)
                {
                    Container.DeclareSignal(type).OptionalSubscriber();
                }
                else
                {
                    Container.DeclareSignal(type);
                }
            }
        }
    }

artisan-jack avatar May 23 '23 13:05 artisan-jack