1

我正在尝试在 Unity 中使用 Zenject。我有一个接口和它的几个实现。

我想用 ID 注入,但实现将具有刻度接口,因为它不是 MonoBehaviour。

所以我有一个IAttacker接口和一个MeleeAttackImpl实现。

Container.Bind<IAttacker>().WithId(AttackerTypeEnum.MELEEE).To<MeleeAttackImpl>().AsTransient();

我想添加

Container.BindInterfacesTo<MeleeAttackImpl>().AsTransient();

但它创建了 2 个不同的对象,而不是具有 Tick 接口并将它们绑定到IAttacker.

4

1 回答 1

0

如果要将接口绑定到确定的实现,为什么要使用两个绑定?如果您只想要一个对象实例,我会尝试: Container.BindInterfacesAndSelfTo<MeleeAttackImpl>().AsSingle(); 或: Container.Bind<IAttacker>().To<MeleeAttackImpl>().AsSingle();

As Single()在这种情况下,您需要从应用程序中的容器提供的相同实例(如单例)。

来自文档:“AsTransient - 根本不会重用实例。每次请求 ContractType 时,DiContainer 将再次执行给定的构造方法。”

很多时候实例是在绑定本身中创建的。所以也许从两个绑定中创建了两个实例,每个绑定一个。

如果您需要动态创建实例并解决所有依赖项,那么您需要的是 Factory。

于 2020-12-09T08:08:30.317 回答