Unity3d 按过程在ScriptableObjectInstaller的多个实例之间交换

Unity3d 按过程在ScriptableObjectInstaller的多个实例之间交换,unity3d,zenject,Unity3d,Zenject,文档中说,您可以轻松地在多个ScriptableObjectInstaller之间交换。我认为可以通过在SceneContext中为同一个类分配所需的ScriptableObjectInstaller来实现这一点。 但如果我想按程序决定使用哪个设置实例呢?在将设置注入到需要设置的位置之前,是否需要在场景上下文中以某种方式按程序更改对设置安装程序的引用?如果是,我该怎么做 例如,我有两个相同SettingsInstaller的实例:SettingsEasy和SettingsHard。如何在注入之前

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

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

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);
    }
}

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);
    }
}
公共类游戏设置安装程序:ScriptableObjectInstaller
{
public override void InstallBindings()
{
// ...
}
}
公共类MainInstaller:MonoInstaller
{
公共事业困难;
public override void InstallBindings()
{
GameSettingsInstaller.InstallFromResource(iShared?“SettingsHard”:“SettingsEasy”,容器);
}
}

在这里,我假设它们被放置在一个路径中,看起来像
Resources/SettingsEasy
Resources/SettingsHard

Ok。因此,在本例中,我不会将此安装程序添加到场景上下文中的脚本对象安装程序占位符中。确切地说,是的,在本例中不需要