zenJect

Zenject框架(二)

2019-03-08  本文已影响0人  虫小白

Hello World 示例

using Zenject;
using UnityEngine;
using System.Collections;

public class TestInstaller : MonoInstaller
{
    public override void InstallBindings()
    {
        Container.Bind<string>().FromInstance("Hello World!");
        Container.Bind<Greeter>().AsSingle().NonLazy();
    }
}

public class Greeter
{
    public Greeter(string message)
    {
        Debug.Log(message);
    }
}

按以下步骤操作后,可以运行该例。

  1. 在Unity中创建新场景
  2. 在Hierarchy面板中点击右键选择Zenject -> Scene Context
  3. 在Project面板中点击右键选择Create -> Zenject -> MonoInstaller.命名为TestInstaller.cs
  4. 把TestInstaller脚本拖拽到场景中的某一物体上(新建物体或使用已存在的物体都无关紧要)
  5. 选中SceneContext游戏对象,在Inspector面板中,找到“Installer”属性点击“+”新增一行,把TestInstaller所在的物体拖拽上去
  6. 打开TestInstaller脚本并将上面的代码粘贴进去
  7. 通过选择Edit - > Zenject - >Validate Current Scene或按Shift + Alt + V来验证场景。(请注意,此步骤不是必需的,但是是启动的良好做法)
  8. 运行
  9. 另请注意,您可以使用快捷方式Ctrl+Shift+R“验证然后运行”。验证通常很快,这不会给运行游戏增加明显的开销,并且当它确实检测到错误时,迭代起来要快得多,因为您可以避免启动时间。
  10. 观察Unity控制台的输出

SceneContext 脚本是应用程序的入口点,Zenject在开始场景之前设置所有各种依赖项。要向Zenject场景添加内容,您需要将Zenject中引用的内容编写为“Installer”,它将声明所有依赖关系及其相互之间的关系。标记为“NonLazy”的所有依赖项在Installers运行后自动创建,这就是我们在上面添加的Greeter类在启动时创建的原因。如果这对你没有意义,请继续阅读!

注入

有许多不同的方法来声明容器(Container)的依赖关系,这将在下一节中介绍。还有几种方法可以将这些依赖项注入到类中。这些是:
1-构造函数注入

public class Foo
{
    IBar _bar;

    public Foo(IBar bar)
    {
        _bar = bar;
    }
}

2-字段注入

public class Foo
{
    [Inject]
    IBar _bar;
}

字段注入在调用构造函数后立即进行。标记有该[Inject]属性的所有字段都在容器(container)中查找并给出一个值。请注意,这些字段无论是私有还是公共的都会发生注入。
3-属性注入

public class Foo
{
    [Inject]
    public IBar Bar
    {
        get;
        private set;
    }
}

除了应用于C#属性之外,属性注入与字段注入相同。 就像字段一样,在这种情况下,属性也可以是私有的或公共的。
3-方法注入

public class Foo
{
    IBar _bar;
    Qux _qux;

    [Inject]
    public Init(IBar bar, Qux qux)
    {
        _bar = bar;
        _qux = qux;
    }
}

方法注入注入与构造函数注入非常相似。

请注意以下事项:

-因为MonoBehaviours不能有构造函数, 因此在MonoBehaviours中使用方法注入是推荐的方式。

上一篇 下一篇

猜你喜欢

热点阅读