0

处理实例化的依赖关系。

所以一个普遍的问题:如何处理实例化的依赖关系?

假设我有两个功能:

public class Manager : ScriptableObject
{
    private var data;
    private void GetDataFromTextAsset() => data = BuildData();
    public bool IsValidInput(var input)
    {
        if(data.SomeAspectIsTrue)
            return true;
        return false;
    }
}

随着:

public class User
{
    public void SomeFunction(var input)
    {
        if(_manager.IsValidInput(input))
            DoStuff();
    }  
}

解决这种依赖关系的正确方法是什么,它解耦了两个类,是可扩展的和可测试的?

我想使用 Zenject,但我不确定这是否对这个特定问题有好处?

另外我猜单身人士在窗外?

4

1 回答 1

0

对于Manager用作单例而不是脚本对象的类的情况,假设您的经理是需要在游戏对象中的某个地方的单一行为,我会这样做:

public class Manager: MonoInstaller
{
    public override void InstallBindings()
    {
        InstallManagers();
    }
    
    void InstallManagers() {
        Container.Bind<Manager>().To<Manager>().FromPrefabInstance("Prefabs/scriptFolderName").AsSingle();
        //....bind other managers
    }
}

在“MonoInstallers”部分将安装程序附加到SceneContext脚本组件。然后在你的User课上:

public class User
{
    [Inject] private Manager _manager; //no need of constructor. Instance is passed in

    public void SomeFunction(var input)
    {
        if(_manager.IsValidInput(input))
            DoStuff();
    }  
}

您可以检查资产,以及非常好的github文档。

于 2021-05-21T14:06:24.037 回答