程序化地在 ScriptableObjectInstaller 的多个实例之间交换

Swap between multiple instances of ScriptableObjectInstaller procedurally

文档说您可以轻松地在多个 ScriptableObjectInstaller 之间切换。我认为您可以通过在 SceneContext 中分配相同 class 所需的 ScriptableObjectInstaller 来做到这一点。 但是,如果我想在程序上决定使用哪个设置实例怎么办?在将设置注入我需要的设置之前,我是否需要以某种方式在场景上下文中以某种方式更改对我的 SettingsInstaller 的引用?如果是这样,我该怎么做?

例如,我有两个相同的 SettingsInstaller 实例:SettingsEasy 和 SettingsHard。我如何在注入前以编程方式在它们之间切换?如果我在场景上下文中有 2 个该设置的实例,那么它会抛出这样的错误:

ZenjectException:在构建 'ClassWhereIInjectingIt'.

类型的对象时,发现多个匹配项,而类型 'MySettingsType' 只需要一个匹配项

以编程方式执行此操作的一种方法是从这样的资源路径安装:

public class GameSettingsInstaller : ScriptableObjectInstaller<GameSettingsInstaller>
{
    public override void InstallBindings()
    {
        // ...
    }
}

public class MainInstaller : MonoInstaller
{
    public bool isHardDifficulty;

    public override void InstallBindings()
    {
        GameSettingsInstaller.InstallFromResource(isHardDifficulty ? "SettingsHard" : "SettingsEasy", Container);
    }
}

在这里,我假设它们放置在看起来像 Resources/SettingsEasyResources/SettingsHard

的路径中